2012-02-07 2 views
0

haml, sass 및 coffeescript와 함께 Rails 3.2.0 사용 : 기본적으로 jQuery_Mobile은 아약스가있는 페이지를로드하지 않으려 고합니다. 뷰 내에서 자바 스크립트를 포함하지 않아도됩니다.// = require가 발생하기 전에 javascript를 실행하십시오.

나는이 시도 : = javascript_include_tag "application"¬가 호출 어떤 // WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD GO AFTER THE REQUIRES BELOW.¬ 수단 때 성공하지

13 //= require jquery¬ 
14 //= require jquery_ujs¬ 
15 //= require_tree .¬ 
16 $(document).bind("mobileinit", function() {¬ 
17 $.mobile.ajaxEnabled = false;¬ 
18 });¬ 
19 //= require jquery_mobile¬ 

을, 나는 완전히 일련의 사건을 이해하지?

답변

2

다른 모든 필수 지시문을 실행 한 후에 application.js 매니페스트 파일에 입력 한 내용은 해당 파일의 맨 아래에서 실행됩니다.

원하는 코드는 자바 스크립트 파일 (jquery_mobile_startup.js)에 넣고 파일 상단에 require 'jquery_mobile_startup.js'을 넣는 것입니다.

스프로킷은 물건을 넣은 주문을 수락하고 require_tree는 이미 가져온 것을 다시 가져 오지 않습니다.

이에 비트를 확장하려면 :

application.js 포함 할 파일에 대한 매니페스트 파일과 같이되고 있으며 생산 톱니에서 실행할 때/레일 하나에 매니페스트에 필요한 모든 파일을 결합한다 큰 자바 스크립트 파일을 축소하여 사용자에게 제공하십시오. <%= javascript_include_tag 'application' %>은 개발 중에 만 여러 태그를 생성합니다.

모든 필수 호출은 태그를 생성하며 모든 일반 자바 스크립트 코드는 application.js에 남아있어 가져온 모든 파일 (개발 중) 이후에 가져옵니다.

1

require 명령은 서버 측에서 Sprockets (자산 파이프 라인)에 의해 처리됩니다. Coffeescript/Sprockets는 자바 스크립트를 실행하지 않습니다. javascript_include_tag "application"을 사용할 때 파이프 라인은 매니페스트 파일 (application.js)을로드하고 require 문을 처리하여 자바 스크립트를 제공합니다.

개발 중에보기에 여러 개의 <script> 마크 업이 추가됩니다.

생산을 위해 Sprockets에 application-hash.js 파일 (해시 값은 자산의 캐시/버전 지정 가능)을 컴파일하도록 요청하고보기에 단일 <script> 마크 업을 추가 할 수 있습니다.

아무리해도 매니 페스트 (나쁜 연습 IMHO)에 자바 스크립트 코드를 삽입해야하는 경우 require 지시어 뒤에 추가해야합니다.

불필요한 자바 스크립트가로드되지 않도록하려면 사용자 브라우저에 따라 포함 된 파일을 필터링하는 전략이 필요합니다. 다른 JS 매니페스트를 만들고 HTTP_USER_AGENT 헤더에 따라 사용할 매니페스트를 결정할 수 있습니다. 단순한 예 :

# app/helpers/user_agent_helper.rb 
    def iphone? 
    request.env["HTTP_USER_AGENT"] && /iPhone/=~request.env["HTTP_USER_AGENT"] 
    end 

    # app/viewss/layouts/application.html.erb 
    ... 
    <head> 
    <%= javascript_include_tag iphone? ? 'iphone' : 'application' %> 
    </head> 

    # app/assets/javascripts/iphone.js 
    //= require jquery 
    //= require jquery-mobile 
    //= require your-iphone-specific-js 
관련 문제