这可能是一个奇怪的问题,但我遇到了问题,我可以解决它,但我只是想知道是否有更优雅的方式。基本上,我需要知道我是否可以使modernizr.load()工作同步而不是异步。
代码看起来像这样(前面的半伪代码)......
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 :(得分:0)
不是加载所有这些,而是使用yepnope的“完整”方法(Modernizr.load
在引擎盖下使用的方法)
modernizr.load([{
load: {
test: 'window.matchmedia',
nope: 'polyfillmatchmedia.js'
},
'script.js': true
},
complete: function() {$.ready(
//...
)}
]);