我要跟你打官司
def new
@test_var = 'i want this to show'
end我所要做的就是将其注入到为该页面调用的javascript中。例如:
#app/assets/javascript/my_model.js.coffee.erb
$ ->
console.log('<%= @test_var %>')我猜这不起作用,因为在3.1中,如果我想把控制器变量注入一个JavaScript文件(客户端--不是通过ajax访问的),我应该怎么做?
发布于 2011-09-22 10:36:54
我认为问题在于你对资产管道的想法完全错误...资产是关键字。
这不是一个视图管道。哪些是资产的其他东西?图像& 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?
https://stackoverflow.com/questions/7496190
复制相似问题