我有一个
的动作def new
@test_var = 'i want this to show'
end
我想要做的就是将其注入为该页面调用的javascript中。例如:
#app/assets/javascript/my_model.js.coffee.erb
$ ->
console.log('<%= @test_var %>')
我猜这不起作用,因为在访问控制器之前编译了coffeescript / erb ...所以,如果我想将控制器变量注入JavaScript文件(客户端 - 不能通过ajax访问)在3.1中,我该怎么做呢?
答案 0 :(得分:5)
我认为问题在于你正在考虑资产管道都错了...... 资产是操作词。
这不是 view 管道。其他资产是什么?图像&amp; css文件,可以预处理然后按原样提供的东西。资产的erb /预处理不会发生在每个页面加载/请求上,而是发生在启动/文件更改中,因此在生产中,所述资产可以进行静态优化,缓存和服务。
您可能想出一种使用实时编译实现它的方法(参见http://guides.rubyonrails.org/asset_pipeline.html的第4.2节),但正如文档所说:
此模式使用更多内存,性能低于默认值。不建议这样做。
糟糕的答案是“将javascript注入到您的视图中”,但是将您的javascript与rails控制器/视图分离是一个好主意。
更好的答案是拥有一个包含所有控制器javascripts的资产文件夹,并使用一些“我在哪个页面?” javascript以确定是否运行代码。
以下是一些解释各种方法的答案:
Rails 3.1 asset pipeline: how to load controller-specific scripts?
Using Rails 3.1, where do you put your "page specific" javascript code?