2

我有一个行动

def new 
  @test_var = 'i want this to show'
end

我要做的就是将其注入为该页面调用的 javascript 中。例如:

#app/assets/javascript/my_model.js.coffee.erb
$ ->
  console.log('<%= @test_var %>')

我猜这不起作用,因为在访问控制器之前编译了咖啡脚本/erb...所以,如果我想在 3.1 中将控制器变量注入 JavaScript 文件(客户端 - 不通过 ajax 访问),我该怎么做呢?

4

1 回答 1

5

我认为问题在于您对资产管道的考虑都是错误的…… 资产是有效的词。

这不是视图管道。其他属于资产的东西?图像和 css 文件,可以预处理然后按原样提供的东西。您的资产的 erb/预处理不会发生在每个页面加载/请求上,而是发生在启动/文件更改时,因此在生产中可以静态优化、缓存和提供资产。

您可能会想出一种使用实时编译来实现它的方法(请参阅http://guides.rubyonrails.org/asset_pipeline.html的第 4.2 节),但正如文档所说:

此模式使用更多内存且性能低于默认模式。不推荐。

不好的答案是“将 javascript 注入您的视图”,但是将您的 javascript 与您的 rails 控制器/视图分离是一个好主意。

更好的答案是拥有一个包含所有控制器 JavaScript 的资产文件夹,并使用一些“我在哪个页面?” javascript 来确定是否运行代码。

以下是一些解释各种方法的答案:

Rails 3.1 资产管道:如何加载特定于控制器的脚本?

使用 Rails 3.1,您将“特定于页面”的 JavaScript 代码放在哪里?

于 2011-09-22T02:36:53.907 回答