Я зову Require.js справа перед закрывающим тегом тела:JQuery document.ready() не работает с Require.js
<script data-main="assets/scripts/src/main.js" src="assets/scripts/lib/requirejs/require.js"></script>
</body>
Вот что мой main.js
содержит:
requirejs.config({
urlArgs: "bust=" + (new Date()).getTime(), // override browser cache
});
require(['views/appView'], function (App) {
App.initialize(); // this is just to test the module is actually loading
});
И appView.js содержит:
define([
'modernizr',
'jquery',
'underscore',
'backbone',
'common', // this module has about 4 other dependencies too
'dust',
'routers/main',
'views/main'
], function (Modernizr, $, _, Backbone, Common, dust, router, mainView) {
// This is supposed to load, even if jQuery loads after the DOM ready event
$(document).on('ready', function() {
console.log("I don't want to play nice");
});
return {
initialize: function() {
console.log("Init");
}
}
});
К сожалению, это: console.log("I don't want to play nice");
не бывает на всех.
Вот как выглядит моя временная шкала сети в Chrome Dev Tools. Как вы можете видеть, событие готовности DOM запускается до загрузки jQuery - но AFAIK, jQuery знает, как с этим справиться! Так что я потерян.
Ответ на ваш вопрос в стороне, называя require.js непосредственно перед тег закрывающего тела полностью поражает точку асинхронной загрузки. Сам файл require.js загружается последовательно - поэтому, если вы вызываете его в конце вашего документа, тогда установленные вами модули не начнут загружаться (хотя и асинхронно), пока после содержимого ... вся цель requireJS и асинхронная загрузка заключается в том, что вы можете вызывать скрипты сначала в голове на выделенном одновременном потоке браузера, чтобы они загружались, пока контент не замедляет работу. – BenLeah