Вот мои main.js перед использованием domReady:
require.config({
paths : {
loader : 'libs/backbone/loader',
jQuery : 'libs/jquery/jquery-module',
Underscore : 'libs/underscore/underscore-module',
Backbone : 'libs/backbone/backbone-module',
templates : '../Templates'
}
});
require([ 'app' ], function(app) {
app.initialize();
});
И app.js:
define([ 'jQuery', 'Underscore', 'Backbone', 'router',
'services/Initializers/MainFrameInitializer',
'services/Initializers/FlowsViewsInitializer',
'services/Initializers/EditModuleInitializer',
'services/Sandboxes/ModulesNavigationSandbox',
'services/Sandboxes/ApplicationStateSandbox', 'DataModel/Constants' ],
function($, _, Backbone, Router, MainFrameInitializer,
FlowsViewsInitializer, EditModuleInitializer, ModulesNavigationSandbox,
ApplicationStateSandbox, Constants) {
var initialize = function() {
// Pass in our Router module and call it's initialize function
MainFrameInitializer.initialize();
FlowsViewsInitializer.initialize();
EditModuleInitializer.initialize();
ApplicationStateSandbox.startCheckStatus();
ModulesNavigationSandbox.navigate(Constants.Modules.Home);
// Router.initialize();
};
return {
initialize : initialize
};
});
Все отлично работает, пока я не оптимизирую проект,Я выяснил, что скрипт начинает работать до того, как DOM будет готов, что было не так до оптимизации.В любом случае, я хочу использовать плагин domReady , чтобы убедиться, что DOM загружен первым.
Но, видимо, я понятия не имею, как это сделать правильно.Вот новая версия main.js:
require.config({
paths : {
loader : 'libs/backbone/loader',
jQuery : 'libs/jquery/jquery-module',
Underscore : 'libs/underscore/underscore-module',
Backbone : 'libs/backbone/backbone-module',
templates : '../Templates'
}
});
require([ 'domReady', 'app' ], function(domReady, app) {
domReady(app.initialize);
});
Очень аккуратно и очень неправильно, потому что app
загружается параллельно с domReady
до того, как DOM будет готов.
Как это исправить?
Спасибо.
РЕДАКТИРОВАТЬ
Мне кажется, я понял нашу проблему.Функции конструктора зависимостей app
не должны запускать какой-либо DOM-зависимый код.Они должны просто возвращать функции, захватив зависимую от DOM логику.Эта логика должна выполняться с app.initialize
, который гарантированно будет работать, когда DOM будет готов.