자바 스크립트 자산 내에서 Rails 도우미 메서드 사용
Rails 도우미 메서드, 특히 자바 스크립트 자산 파일 내의 경로 도우미 메서드를 사용하는 방법이 있습니까? 이 파일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
URL 도우미를 사용하려면 특정 응용 프로그램의 도우미를 포함해야합니다.
다음에서 사용할 수 있습니다 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...)
. JavaScript로 모든 Rails UrlHelpers를 다시 구현하는 루비 gem이 있습니다 : https://github.com/railsware/js-routes
왜 이렇게 하려는지 잘 모르겠습니다.
동적 값을 포함하고 있으므로 자바 스크립트 파일이 캐시되지 않도록 방지합니다.
자바 스크립트 / 커피 스크립트와 레일 사이의 결합을 얻을 수 있습니다.
가능한 경우 뷰에 대상 경로를 제공하여 문제를 추상화하고 특정 이벤트가 발생할 때 DOM 요소에서 값을 검색하도록 조언합니다. Rails를위한 'Unobtrusive Scripting Adapters'처럼. 예 : https://github.com/rails/jquery-ujs/blob/master/src/rails.js#L157-173
실제로 @eirc 답변에 동의합니다 (Sprockets 문서 고려). 하지만 레일스 부팅 시간에 도우미 모듈을 포함하는 것을 고려할 것입니다. 에 따라
# 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
자산에
참고 URL : https://stackoverflow.com/questions/7451517/using-a-rails-helper-method-within-a-javascript-asset
'Nice programing' 카테고리의 다른 글
ConcurrentMap의 putIfAbsent를 사용하기 전에 맵에 키가 포함되어 있는지 확인해야합니다. (0) | 2020.11.04 |
---|---|
자바 스크립트 코드를 통해 체크 된 경우에도 체크 박스 클릭 이벤트를 트리거하는 방법은 무엇입니까? (0) | 2020.11.04 |
CSS로 테두리 너비를 어떻게 설정합니까? (0) | 2020.11.04 |
구분 기호에 따라 하나의 파일을 여러 파일로 분할 (0) | 2020.11.04 |
nginx 및 사이트에서 여러 웹 사이트 사용 가능 (0) | 2020.11.04 |