首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在链轮预处理的js文件(而不是视图)中获取escape_javascript和其他辅助对象?

如何在链轮预处理的js文件(而不是视图)中获取escape_javascript和其他辅助对象?
EN

Stack Overflow用户
提问于 2011-07-27 09:38:15
回答 3查看 6.3K关注 0票数 16

我使用的是Rails 3.1和链轮之类的东西。

我想使用ERB对js文件进行预处理,然后使用javascript_include_tag将其包含进来。它是从代码生成的,所以我用ERB对它进行了预处理,但是我不能从ActionView:: helpers ::JavaScriptHelper获得像escape_javascript这样的帮助器

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

代码语言:javascript
复制
obj = {
 name: "test",
 tag: "<%= escape_javascript( image_tag( "logo.png" ) )%>"
};

如何阻止它生成错误:

代码语言:javascript
复制
throw Error("NoMethodError: undefined method `escape_javascript' for #<#<Class:0x1067da940>:0x116b2be18>
(in /Users/me/site/app/assets/javascripts/dynamic.js.erb)")

当我访问本地服务器并请求/assets/dynamic.js

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-27 12:34:14

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

代码语言:javascript
复制
class Helper
  include ActionView::Helpers::JavaScriptHelper

  def self.escape_js( text )
    @instance ||= self.new
    return @instance.escape_javascript( text )
  end
end

然后在您的ERB文件中使用它:

代码语言:javascript
复制
obj = {
 name: "test",
 tag: "<%= Helper.escape_js( image_tag( "logo.png" ) ) )%>"
};
票数 13
EN

Stack Overflow用户

发布于 2015-03-20 03:00:52

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

代码语言:javascript
复制
// file.js.erb
var x = "<%= ActionController::Base.helpers.j image_tag('logo.png') %>";

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

票数 10
EN

Stack Overflow用户

发布于 2011-11-15 17:14:37

也可以将JavaScriptHelper直接包含到链轮Context类(运行模板的类)中:

代码语言:javascript
复制
<% environment.context_class.instance_eval { include ActionView::Helpers::JavaScriptHelper } %>

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

代码语言:javascript
复制
<% environment.context_class.instance_eval { include MyHelper } %>
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6838550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档