Używanie metody pomocniczej Rails wewnątrz zasobu javascript
Czy Jest jakiś sposób na użycie metody pomocniczej Rails, a dokładniej metody pomocniczej path w pliku zasobu javascript. Ten plik foo.js.coffee.erb
$('#bar').val("<%= create_post_path %>")
Chciałbym dostać od erubisa.]}
$('#bar').val("path/to/create")
5 answers
Możesz umieścić dowolny helper / moduł / klasę w szablonie erb z:
<% environment.context_class.instance_eval { include MyHelper } %>
Zobacz: https://github.com/rails/sprockets/blob/master/lib/sprockets/environment.rb i https://github.com/rails/sprockets/blob/master/lib/sprockets/context.rb
Aby używać helperów url, musisz dołączyć helpery konkretnych aplikacji.
Są dostępne w Rails.application.routes.url_helpers
więc:
<% environment.context_class.instance_eval { include Rails.application.routes.url_helpers } %>
EDIT: poprawione linki do przeniesionych zębatek repo ale nie jestem pewien czy to jeszcze to ma sens wiele lat później.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-12 13:29:43
To również zadziała w inicjalizatorze:
Sprockets::Context.send :include, MyHelper
W trybie deweloperskim helper nie będzie przeładowywany na każde żądanie.
Twoje podejście do UrlHelpers będzie działać, dopóki nie będziesz musiał znaleźć post_path(...um...we don't know what post id we'll need at compile time...)
. Istnieje klejnot ruby, który reimplementuje wszystkie Twoje Rails UrlHelpers w JavaScript: https://github.com/railsware/js-routes
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-12 14:35:54
Nie jestem do końca pewien, dlaczego chcesz to zrobić.
-
Plik javascript nie będzie buforowany, ponieważ zawiera dynamiczną wartość
-
Możesz uzyskać połączenie między Twoim javascript / coffeescript i rails
Jeśli to możliwe, radziłbym Ci usunąć problem, podając ścieżkę docelową w widoku i pobierając wartość z elementu DOM, gdy wystąpi określone zdarzenie. Podobnie jak "dyskretne Adaptery Skryptowe" dla Rails zrobić. Np.: https://github.com/rails/jquery-ujs/blob/master/src/rails.js#L157-173
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-18 20:24:01
Rzeczywiście zgadzam się z odpowiedzią @eirc (biorąc pod uwagę dokumentację kół zębatych). Ale ja bym rozważ włączenie modułów pomocniczych w czasie rozruchu rails. Zgodnie z
# config/initializers/sprockets.rb
Rails.application.assets.context_class.instance_eval do
include ActionView::Helpers
include Rails.application.routes.url_helpers
include MyModule
end
Wynika to z: https://github.com/rails/sprockets-rails/blob/master/lib/sprockets/railtie.rb#L23
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-03 10:16:40
Właściwie, Nie wiem, czy to pomaga, ale istnieje sposób, aby zdefiniować własne helpery do użycia podczas rake precompile
Utwórz nowy inicjalizator i umieść w nim to:
module Sprockets
module Helpers
module RailsHelper
def my_helper_method
...
end
end
end
end
I wtedy możesz:
<%= my_helper_method %>
W Twoim .erb
majątku
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-01 20:09:25