ruby-on-rails-3.1 - 导轨3.1/sprockets : Injecting controller variables (or helpers) into javascript assets

标签 ruby-on-rails-3.1 sprockets

我有一个行动

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

我想做的就是将其注入(inject)到该页面调用的 javascript 中。例如:

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

我猜这不起作用,因为在访问 Controller 之前 CoffeeScript /erb是编译的......所以,如果我想将 Controller 变量注入(inject)JavaScript文件(客户端 - 不通过ajax访问)在3.1中,我应该如何去做呢?

最佳答案

我认为问题在于您对 Assets 管道的思考完全错误...... Assets 是关键词。

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

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

This mode uses more memory and is lower performance than the default. It is not recommended.

糟糕的答案是“将 javascript 注入(inject)到您的 View 中”,但将 javascript 与 Rails Controller / View 解耦是一个好主意。

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

关于ruby-on-rails-3.1 - 导轨3.1/sprockets : Injecting controller variables (or helpers) into javascript assets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7496190/

相关文章:

Ruby 检查变量是否有长度

javascript - 如何在 Rails 3.1 中将 jquery 替换为原型(prototype)

ruby-on-rails - 在没有标签标签包装器的情况下获取国际化标签文本

ruby-on-rails - Rails 3.1 & Sprockets & 编译的 JS 文件

jquery - 什么所见即所得与 jQuery 和 Ruby on Rails 3.1 (Sprockets) 配合得很好?

ruby-on-rails - 使用 Remarkable 作为来自 Github 的 gem

ruby-on-rails - 包含 InstanceMethods 模块时覆盖 attr_accessor 的 setter 方法

ruby-on-rails - 找不到 sprockets 文件异常

ruby-on-rails - Rails 3.2.8 Application.js 和 Application.css 未按预期工作

ruby-on-rails - 带 rails 的 Chef : Handling asset precompiling during deploy