【问题标题】:Rails 3.1/Sprockets: Injecting controller variables (or helpers) into javascript assetsRails 3.1/Sprockets:将控制器变量(或助手)注入 javascript 资产
【发布时间】:2023-03-10 21:33:02
【问题描述】:

我有一个动作

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

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

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

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

【问题讨论】:

    标签: ruby-on-rails-3.1 sprockets


    【解决方案1】:

    我认为问题在于您对资产管道的看法完全错误...... asset 是操作词。

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

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

    与默认模式相比,此模式使用更多内存且性能较低。不推荐。

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

    更好的答案是拥有一个包含所有控制器 JavaScript 的资产文件夹,并使用一些“我在哪个页面上?” 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?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-13
      • 2011-11-24
      • 2012-01-20
      • 1970-01-01
      • 2011-02-12
      • 1970-01-01
      • 1970-01-01
      • 2013-02-27
      相关资源
      最近更新 更多