Ruby数组到Javascript数组

Bri*_*ian 33 javascript ruby

我有一个带有帐户ID的Ruby数组.

我想将一个帐户ID的Ruby数组存储在一个Javascript数组中.

我想知道最好的方法吗?

此外,当我一直试图这样做时,似乎Javascript认为如果只输入一个帐户ID,则应该是数组的大小.有没有解决的办法?我试过把它放在引号中,但这似乎不起作用.

tok*_*and 46

我们假设您正在使用erb.第一种方法:

<%= javascript_tag "account_ids = #{account_ids.to_json.html_safe};" %>
Run Code Online (Sandbox Code Playgroud)

问题是这会创建一个没有上下文的全局变量(谁使用它?).这就是为什么我宁愿调用JS代码中某处定义的函数:

<%= javascript_tag "setAccounts(#{account_ids.to_json.html_safe});" %>
Run Code Online (Sandbox Code Playgroud)


ken*_*ken 34

这是适合我的方式.假设我在控制器中有数组:

@my_array = [['city', 'number'], ['nyc', 39], ['queens', 98]]
Run Code Online (Sandbox Code Playgroud)

我想在slim中使用它并生成一个Google饼图,然后我可以通过以下方式获得该JavaScript数组:

javascript:
  var myJsArray = #{raw @my_array};
Run Code Online (Sandbox Code Playgroud)

或者我可以在erb中获得JavaScript数组:

var myJsArray = <%=raw @my_array%>;
Run Code Online (Sandbox Code Playgroud)

不知何故,对我有用.

  • `raw(ruby array)`对我来说很好,将数组Ruby转换为Array Javascript (3认同)

Sha*_*ell 5

如果在你的控制器中你有:

@my_array = [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

您可以在视图中设置如下的javascript变量:

<script type="text/javascript">
  var myJSArray = new Array(<%= @my_array.map(&:to_s).join(", ") %>);
</script>
Run Code Online (Sandbox Code Playgroud)

要么:

var myJSArray = [<%= @my_array.map(&:to_s).join(", ") %>];
Run Code Online (Sandbox Code Playgroud)

这两种情况都会将数字id值的ruby数组更改为字符串数组,然后将这些字符串值与逗号连接在一起,以输出javascript的有效值.

如果你想在你的javascript中使用字符串表示,你需要在ruby数组中的值周围添加双引号:

var myJSArray = [<%= @my_array.map { |some_id| '"' + some_id.to_s + '"' }.join(", ") %>];
Run Code Online (Sandbox Code Playgroud)