我正在使用Rails 3.1和链轮的东西。
我想使用ERB预处理js文件,然后使用javascript_include_tag将其包含在内。它是从代码生成的,所以我用ERB预处理它,但是我无法从ActionView :: Helpers :: JavaScriptHelper
中找到像escape_javascript这样的帮助器假设我的文件名为dynamic.js.erb,它包含
obj = {
name: "test",
tag: "<%= escape_javascript( image_tag( "logo.png" ) )%>"
};
如何阻止它产生错误:
throw Error("NoMethodError: undefined method `escape_javascript' for #<#<Class:0x1067da940>:0x116b2be18>
(in /Users/me/site/app/assets/javascripts/dynamic.js.erb)")
当我点击本地服务器并要求/assets/dynamic.js
答案 0 :(得分:13)
您可以将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" ) ) )%>"
};
答案 1 :(得分:10)
通过ActionController::Base.helpers
这样称呼它:
// file.js.erb
var x = "<%= ActionController::Base.helpers.j image_tag('logo.png') %>";
请注意,j
是escape_javascript
的别名,因此如果您愿意,可以使用长名称。
答案 2 :(得分:8)
您也可以将JavaScriptHelper
直接包含在Sprockets Context
类(运行模板的类)中:
<% environment.context_class.instance_eval { include ActionView::Helpers::JavaScriptHelper } %>
甚至可以在其他地方定义您的帮助程序并将其包含在模板中(以便能够并重用帮助程序)
<% environment.context_class.instance_eval { include MyHelper } %>