簡體   English   中英

在javascript資產中使用Rails幫助器方法

[英]Using a Rails helper method within a javascript asset

有沒有辦法使用Rails助手方法,更具體地說,是javascript資產文件中的路徑助手方法。 這個文件是foo.js.coffee.erb

$('#bar').val("<%= create_post_path %>")

如果我能從erubis那里得到,我會喜歡它

$('#bar').val("path/to/create")

您可以在erb模板中包含任何幫助器/模塊/類:

<% environment.context_class.instance_eval { include MyHelper } %>

請參閱: https//github.com/rails/sprockets/blob/master/lib/sprockets/environment.rbhttps://github.com/rails/sprockets/blob/master/lib/sprockets/context.rb

要使用網址助手,您必須包含特定應用程序的幫助程序。

它們可以在Rails.application.routes.url_helpers中找到:

<% environment.context_class.instance_eval { include Rails.application.routes.url_helpers } %>

編輯:固定鏈接到移動的鏈輪回購但不確定這仍然有多年后的意義。

這也可以在初始化器中完成:

Sprockets::Context.send :include, MyHelper

在開發模式下,不會在每個請求上重新加載幫助程序。

您使用UrlHelpers的方法將一直有效,直到您需要找到post_path(...um...we don't know what post id we'll need at compile time...) 有一個ruby gem在JavaScript中重新實現了所有的Rails UrlHelpers: https//github.com/railsware/js-routes

我不太確定,你為什么要這樣做。

  • 您可以阻止緩存javascript文件,因為它包含動態值

  • 你會得到你的javascript / coffeescript和rails之間的耦合

如果可能,我會建議您通過在視圖中提供目標路徑來抽象問題,並在特定事件發生時從DOM元素中檢索值。 就像Rails的'Unobtrusive Scripting Adapters'一樣。 例如: https//github.com/rails/jquery-ujs/blob/master/src/rails.js#L157-173

確實,我同意@eirc的答案(考慮到Sprockets文檔)。 但我會考慮在rails啟動時包含輔助模塊。 按照

# config/initializers/sprockets.rb
Rails.application.assets.context_class.instance_eval do
  include ActionView::Helpers
  include Rails.application.routes.url_helpers
  include MyModule
end

這是因為: https//github.com/rails/sprockets-rails/blob/master/lib/sprockets/railtie.rb#L23

實際上,不確定這是否有幫助,但有一種方法可以定義自己的幫助程序,以便在rake precompile期間使用

創建一個新的初始化程序並將其放入其中:

module Sprockets
  module Helpers
    module RailsHelper

      def my_helper_method
       ...
      end

    end
  end
end

然后你可以:

<%= my_helper_method %>

在你的.erb資產中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM