16

私は Rails 3.1 とスプロケットのものを使用しています。

ERB を使用して、javascript_include_tag を使用してインクルードされる js ファイルを前処理したいと考えています。コードから生成されるので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

4

3 に答える 3

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" ) ) )%>"
};
于 2011-07-27T04:34:14.193 に答える
10

次のように呼び出しますActionController::Base.helpers

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

jは のエイリアスであるためescape_javascript、必要に応じて長い名前を使用できます。

于 2015-03-19T19:00:51.927 に答える
8

Sprocketsクラス (テンプレートを実行するクラス)にJavaScriptHelper直接インクルードすることもできます。Context

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

または、ヘルパーを別の場所で定義し、それをテンプレートに含めます (ヘルパーを再利用できるようにするため)

<% environment.context_class.instance_eval { include MyHelper } %>
于 2011-11-15T09:14:36.893 に答える