2014-07-18 1 views
0

이상한 질문 일지 모르지만 문제가 있으며 해결할 수는 있지만 더 많은 것이 있는지 궁금합니다. 우아한 방법. 기본적으로, 나는 비동기가 아닌 modernizr.load() 작업을 동기식으로 만들 수 있는지 알아야합니다.Modernizr이 스크립트를 synchroneous로로드하도록 강제하는 방법이 있습니까 (차단해야 함)

코드는


에게 ...이 (앞서 반 의사 코드)처럼 index.html을 보이는

<script src="jquery.js"></script> 
<script src="modernizr-with-yepnope.js"> 

<script> 
    var App = {}; 
    (function($)) { 
    $(function() { 
     initAllAppMethods(); 
    }); 
    })(jQuery); 
</script> 

<script> 
    modernizr.load([ 
    { 
     test: 'window.matchmedia', 
     nope: 'polyfillmatchmedia.js' 
    }, 
    'script.js' 
    ]); 
</script> 

SCRIPT.JS

<script> 
    App.myAppmethod = function() { 
    // ... 
    } 
</script> 

내가 겪고있는 문제는 modernizr.load의 비동기 적 특성 때문에 $ .ready 함수가 실제로 내 App 메소드가 App 객체에 추가되기 전에 발생한다는 것입니다. (또는 적어도 내가 생각하는 것이 문제입니다.). 따라서 본질적으로 아무 것도 발생하지 않습니다. 앱이 아직 $ .ready가 실행될 때 어떤 메소드도 없습니다.

이제 scripts.js의 끝에 initAllAppMethods()를 호출하여이 문제를 쉽게 해결할 수 있지만로드 순서의 문제는 숨겨져 있습니다. modernizr.load()가 script.js를로드해야하는 이유는 polyfill이 활성 상태인지 여부를 알아야하기 때문입니다.

그래서 ... 지금까지 읽은 사람이라면 ... 내가 왜 modernizr.load()를 통해 모든 것을로드하지 않는지 궁금하다면, 나는 CMS 때문에이 순서에 다소 구속되어 있기 때문입니다. 나는 이것을 구현하고있다. modernizr.load()가 scripts.js를 동기화하도록 만들 수 있다면 아무런 문제가 없을 것입니다. (나는 생각한다).

답변

0

그들 모두를로드하기보다는, (Modernizr.load는 후드 사용하는 것) yepnope의 '완전한'방법

modernizr.load([{ 
load: { 
     test: 'window.matchmedia', 
     nope: 'polyfillmatchmedia.js' 
    }, 
    'script.js': true 
}, 
complete: function() {$.ready(
    //... 
)} 
]); 
를 사용