Nice programing

자바 스크립트 자산 내에서 Rails 도우미 메서드 사용

nicepro 2020. 11. 4. 08:27
반응형

자바 스크립트 자산 내에서 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.rbhttps://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

반응형