【问题标题】:Ruby array to Javascript arrayRuby 数组到 Javascript 数组
【发布时间】:2012-01-12 14:06:49
【问题描述】:

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

我想将帐户 ID 的 Ruby 数组存储在 Javascript 数组中。

我想知道最好的方法吗?

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

【问题讨论】:

  • 使用erb?使用导轨?相应地标记它。

标签: javascript ruby


【解决方案1】:

假设您使用的是 erb。第一种方法:

<%= javascript_tag "account_ids = #{account_ids.to_json.html_safe};" %>

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

<%= javascript_tag "setAccounts(#{account_ids.to_json.html_safe});" %>

【讨论】:

  • 酷,这似乎奏效了。当数组中只有当项时有任何解决方法吗?例如,如果我在数组中有一个帐户 ID,比如说两个,我调用 .length 它认为数组中有两个项目。
  • @Brian:我不明白,你能在问题中粘贴一些代码吗?如果你有一个 Ruby 数组,无论它有多少元素,它都应该可以工作(即 account_ids.length 应该返回 1,如果它的值是 [2]
  • 没关系。我正在使用一个循环,我从零开始而不是一开始。感谢您的帮助!
  • 当数组是 js 对象中的值时,例如 var obj = { key1: &lt;%= @array.to_json %&gt; }; 我得到:SyntaxError: illegal character key1: [\&amp;quot;dog\&amp;quot;,\&amp;quot;cat\&amp;quot;], 带有指向第一个斜杠的箭头。但 raw() 有效:var obj = { key1: &lt;%= raw @array %&gt; };
【解决方案2】:

如果您的控制器中有:

@my_array = [1, 2, 3]

您可以在视图中设置这样的 javascript 变量:

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

或:

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

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

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

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

【讨论】:

    【解决方案3】:

    基于@Shadwell 提出的最后一个解决方案,我更喜欢这样的解决方案:

     var myJSArray = new Array("#{@my_array.map(&:inspect).join(", ")}");
    

    我的示例没有使用 ERB,因为它用于 mongodb 的 MapReduce 函数。

    【讨论】:

      【解决方案4】:

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

      @my_array = [['city', 'number'], ['nyc', 39], ['queens', 98]]
      

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

      javascript:
        var myJsArray = #{raw @my_array};
      

      或者我可以像这样在 erb 中获取 JavaScript 数组:

      var myJsArray = <%=raw @my_array%>;
      

      不知何故,对我有用。

      【讨论】:

      • raw(ruby array) 对我来说很好,将数组 Ruby 转换为数组 Javascript
      • raw() 对我有用,而 to_json() 对我不起作用:var obj = {key1: &lt;% raw @array %&gt; };
      • 这个“原始”技巧有效 - 我不需要 json 对象 - 只是我在 JS 变量中的数组。当渲染的 js.erb 在 Rails 中失败时,您不会收到错误消息来提供帮助,并且您也无法在 browser-inspector-console 中测试这种事情。如果不是为了这个答案,谁知道这个微不足道的任务还有多少小时。非常感谢
      猜你喜欢
      • 2012-06-27
      • 2015-09-22
      • 2014-08-22
      • 1970-01-01
      • 2020-02-05
      • 2013-09-26
      • 1970-01-01
      • 2010-12-11
      • 1970-01-01
      相关资源
      最近更新 更多