0

我在控制器中声明了一个字符串数组,需要在 js 文件中使用。这是我的代码:

#controller
@cars = current_user.cars.completed.collect{|c| c.name.titleize }
puts "#{@cars.inspect}"

puts回报:

["Presentation 2", "Presentation 1"]

我现在需要在 javascript 中使用数组,所以我这样做:

//javascript
var lineChartData = {
    labels : <%= @cars %> 
}

javascript 无法正常工作,因为浏览器将其读取为:

//javascruot
var lineChartData = {
    labels : [&quot;Presentation 2&quot;, &quot;Presentation 1&quot;], 
}

我试过html_safe这样使用:

#controller
@cars = current_user.cars.completed.collect{|c| c.name.titleize.html_safe }
puts "#{@cars.inspect}"

但它没有效果。如何让报价正常工作?

4

3 回答 3

1

我会使用to_json

//javascript
var lineChartData = {
    labels : <%== @cars.to_json %> 
}
于 2015-07-29T21:20:54.487 回答
0

虽然我不建议使用OutputSafetyHelper#raw直接将 Ruby 变量注入 JavaScript :

//javascript
var lineChartData = {
  labels : <%= raw @cars %> 
}

我建议将这些字符串嵌入 HTML 并使用 JavaScript 获取它们。

于 2015-07-29T21:24:51.507 回答
0

似乎您正在使用 ERB 生成 JS 视图。我建议不要像这样将 ERB 与 JS 混合。尝试使用像Gon这样的工具,它允许您将变量设置到控制器中的 Ruby 对象上,并允许您使用 Javascript 对象引用 JS 中的数据。这种方法的优点是你可以编写纯 JS 并将其保存在 assets 目录中。然后你可以利用资产管道:最小化、丑化、咖啡脚本等。资产目录中的纯 JS 也更容易使用像 Jasmine 这样的 JS 测试框架进行测试。

于 2015-07-29T22:14:04.213 回答