如何在我的sprockets预处理的js文件(不是视图)中获取escape_javascript和其他帮助器?

我正在使用Rails 3.1和链轮的东西。

我想使用ERB预处理一个js文件,然后使用javascript_include_tag包含该文件。 它是从代码生成的,所以我用ERB预处理它,但是我无法从ActionView :: Helpers :: JavaScriptHelper获取类似escape_javascript的帮助器

假设我的文件名为dynamic.js.erb,它包含

obj = { name: "test", tag: "" }; 

如何阻止它产生错误:

 throw Error("NoMethodError: undefined method `escape_javascript' for #<#:0x116b2be18> (in /Users/me/site/app/assets/javascripts/dynamic.js.erb)") 

当我点击我的本地服务器并要求/assets/dynamic.js

您可以将rails JS助手包含在您自己的类中。

 class Helper include ActionView::Helpers::JavaScriptHelper def self.escape_js( text ) @instance ||= self.new return @instance.escape_javascript( text ) end end 

然后在ERB文件中使用它:

 obj = { name: "test", tag: "<%= Helper.escape_js( image_tag( "logo.png" ) ) )%>" }; 

通过ActionController::Base.helpers调用它,如下所示:

 // file.js.erb var x = "<%= ActionController::Base.helpers.j image_tag('logo.png') %>"; 

请注意, jescape_javascript的别名,因此如果您愿意,可以使用长名称。

您也可以将JavaScriptHelper直接包含在Sprockets Context类(运行模板的类)中:

 <% environment.context_class.instance_eval { include ActionView::Helpers::JavaScriptHelper } %> 

或者甚至在其他地方定义您的帮助程序并将其包含在模板中(以便能够并重用帮助程序)

 <% environment.context_class.instance_eval { include MyHelper } %>