[英]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.rb和https://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.