如何在我的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') %>";
请注意, j
是escape_javascript
的别名,因此如果您愿意,可以使用长名称。
您也可以将JavaScriptHelper
直接包含在Sprockets Context
类(运行模板的类)中:
<% environment.context_class.instance_eval { include ActionView::Helpers::JavaScriptHelper } %>
或者甚至在其他地方定义您的帮助程序并将其包含在模板中(以便能够并重用帮助程序)
<% environment.context_class.instance_eval { include MyHelper } %>