noc*_*che 15 javascript ruby-on-rails erb ruby-on-rails-3.1 sprockets
我正在使用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" ) )%>"
};
Run Code Online (Sandbox Code Playgroud)
如何阻止它产生错误:
throw Error("NoMethodError: undefined method `escape_javascript' for #<#<Class:0x1067da940>:0x116b2be18>
(in /Users/me/site/app/assets/javascripts/dynamic.js.erb)")
Run Code Online (Sandbox Code Playgroud)
当我点击我的本地服务器并要求时 /assets/dynamic.js
cam*_*mmm 13
您可以将rails JS助手包含在您自己的类中.
class Helper
include ActionView::Helpers::JavaScriptHelper
def self.escape_js( text )
@instance ||= self.new
return @instance.escape_javascript( text )
end
end
Run Code Online (Sandbox Code Playgroud)
然后在ERB文件中使用它:
obj = {
name: "test",
tag: "<%= Helper.escape_js( image_tag( "logo.png" ) ) )%>"
};
Run Code Online (Sandbox Code Playgroud)
bal*_*and 10
ActionController::Base.helpers像这样称呼它:
// file.js.erb
var x = "<%= ActionController::Base.helpers.j image_tag('logo.png') %>";
Run Code Online (Sandbox Code Playgroud)
请注意,这j是别名escape_javascript,因此如果您愿意,可以使用长名称.
您也可以JavaScriptHelper直接包含在Sprockets Context类(运行模板的类)中:
<% environment.context_class.instance_eval { include ActionView::Helpers::JavaScriptHelper } %>
Run Code Online (Sandbox Code Playgroud)
或者甚至在其他地方定义您的帮助程序并将其包含在模板中(以便能够并重用帮助程序)
<% environment.context_class.instance_eval { include MyHelper } %>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5795 次 |
| 最近记录: |