html_safe 在 rails 到 javascript 中不工作
html_safe is not working in rails to javascript
我在我的控制器中声明了一个字符串数组,我需要在 js 文件中使用它。这是我的代码:
#controller
@cars = current_user.cars.completed.collect{|c| c.name.titleize }
puts "#{@cars.inspect}"
puts
returns:
["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}"
但是没有效果。如何让引号正常工作?
我会用 to_json
:
//javascript
var lineChartData = {
labels : <%== @cars.to_json %>
}
尽管我不建议直接使用 OutputSafetyHelper#raw 将 Ruby 变量注入 JavaScript:
//javascript
var lineChartData = {
labels : <%= raw @cars %>
}
我建议将这些字符串嵌入 HTML 并使用 JavaScript 获取它们。
您似乎正在使用 ERB 生成 JS 视图。我建议不要像这样将 ERB 与 JS 混合使用。尝试使用像 Gon 这样的工具,它允许您将变量设置到控制器中的 Ruby 对象上,并允许您使用 Javascript 对象引用 JS 中的数据。这种方式的好处是可以写纯JS,放在assets目录下。然后你可以利用资产管道:最小化、丑化、咖啡脚本等。资产目录中的纯 JS 也更容易使用 Jasmine 等 JS 测试框架进行测试。
我在我的控制器中声明了一个字符串数组,我需要在 js 文件中使用它。这是我的代码:
#controller
@cars = current_user.cars.completed.collect{|c| c.name.titleize }
puts "#{@cars.inspect}"
puts
returns:
["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}"
但是没有效果。如何让引号正常工作?
我会用 to_json
:
//javascript
var lineChartData = {
labels : <%== @cars.to_json %>
}
尽管我不建议直接使用 OutputSafetyHelper#raw 将 Ruby 变量注入 JavaScript:
//javascript
var lineChartData = {
labels : <%= raw @cars %>
}
我建议将这些字符串嵌入 HTML 并使用 JavaScript 获取它们。
您似乎正在使用 ERB 生成 JS 视图。我建议不要像这样将 ERB 与 JS 混合使用。尝试使用像 Gon 这样的工具,它允许您将变量设置到控制器中的 Ruby 对象上,并允许您使用 Javascript 对象引用 JS 中的数据。这种方式的好处是可以写纯JS,放在assets目录下。然后你可以利用资产管道:最小化、丑化、咖啡脚本等。资产目录中的纯 JS 也更容易使用 Jasmine 等 JS 测试框架进行测试。