【问题标题】:Getting each i element of a ruby array in a javascript function (escaping and unescaping)?在 javascript 函数中获取 ruby​​ 数组的每个 i 元素(转义和取消转义)?
【发布时间】:2017-05-20 01:28:01
【问题描述】:

说,在 ruby​​ 中我有一个数组:ruby_array = [1, 2, 3, 4, 5]

在我的 javascript 脚本中,我希望能够将每个元素从 myruby_array 推送到 javascriptArray

var javascriptArray = [];

for (i = 0; i < <%= raw ruby_array.size %>; i++) {
   alert("The " + i + ". element of my ruby array is: " + <%= raw ruby_array[i] %>);
   // Problem: I guess, I cannot get the i javascript variable when calling ruby_array[i]
   // How do I unescape the i?

   // Now push every ruby_array element into my javascriptArray
   // Same problem like above
   javascriptArray[i] = Number(<%= raw ruby_array[i] %>);
}

我得到的错误信息是:

SyntaxError: 预期的表达式,得到 ')'

注意:如果我将 ruby_array[i] 中的 [i] 留在外面,则输出正常:

我的 ruby​​ 数组的 0. 元素是:1,2,3,4,5

...

我的 ruby​​ 数组的 4. 元素是:1,2,3,4,5

我也尝试过.to_json.html_safe,结果相同。那么如何在 javascript 代码中从我的 ruby​​ 数组中获取第 i 个元素呢?

【问题讨论】:

  • 你的javascript变量i&lt;%= raw ruby_array[i] %&gt;中是未知的
  • 啊...如您的 cmets 所述
  • 是的,我想这就是问题所在。那么我怎样才能取消 i 并告诉 ruby​​ 我的 javascript 循环中的 i 意味着:)?
  • 您不能以这种方式互操作 javascript 和 ruby​​,您需要将 ruby​​ 数据转换为纯 javascript 数组,然后通过:jsArray[i]; 访问它。
  • @praszyk:哦,很高兴知道。一个问题:当我将我的 ruby​​ 数组转换为 javascript 数组时,我的 javascript 数组中的元素也是数字吗?还是我也必须将它们转换成数字?

标签: javascript jquery ruby-on-rails arrays ruby


【解决方案1】:

我还没有测试过,但这应该可以工作

var javascriptArray = [<%= j(ruby_array.join(',')) %>];

【讨论】:

  • 不,如果 ruby​​ 数组中的任何值是字符串,那么您将得到语法错误。你需要使用 escape_javascript...
【解决方案2】:

这两个都会转义js。

你可以试试:

var javascriptArray = <%= escape_javascript ruby_array.to_json %>

var javascriptArray = <%= j ruby_array.to_json %>

【讨论】:

  • 哦,天哪,这似乎比创建一个循环并将每个 ruby​​ 项推入新的 javascriptArray 容易得多。谢谢!一个问题:由于我需要我的元素作为数字,新的 javascriptArray 是否也包含数字或者它们是字符串?
猜你喜欢
  • 1970-01-01
  • 2015-05-16
  • 2012-12-14
  • 2010-10-27
  • 2014-02-22
  • 2018-01-24
  • 1970-01-01
  • 2015-05-31
  • 2013-12-30
相关资源
最近更新 更多