我在控制器中声明了一个我需要在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 : ["Presentation 2", "Presentation 1"],
}
我尝试过这样使用html_safe
:
#controller
@cars = current_user.cars.completed.collect{|c| c.name.titleize.html_safe }
puts "#{@cars.inspect}"
但没有效果。如何让报价正常工作?
答案 0 :(得分:1)
我会使用to_json
:
//javascript
var lineChartData = {
labels : <%== @cars.to_json %>
}
答案 1 :(得分:0)
虽然我没有建议使用OutputSafetyHelper#raw工程直接将Ruby变量注入JavaScript:
//javascript
var lineChartData = {
labels : <%= raw @cars %>
}
我建议将这些字符串嵌入到HTML中并使用JavaScript获取它们。
答案 2 :(得分:0)
您似乎正在使用ERB生成JS视图。我建议不要将ERB与JS混合使用。尝试使用像Gon这样的工具,它允许您将变量设置到控制器中的Ruby对象上,并允许您使用Javascript对象引用JS中的数据。这种方法的优点是你可以编写纯JS并将其保存在assets目录中。然后你可以利用资产管道:最小化,丑化,咖啡脚本等。资产目录中的纯JS也更容易使用像Jasmine这样的JS测试框架进行测试。