mar*_*ark 4 javascript domready requirejs
在使用domReady之前,这是我的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([ 'app' ], function(app) {
app.initialize();
});
Run Code Online (Sandbox Code Playgroud)
和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
};
});
Run Code Online (Sandbox Code Playgroud)
一切正常,直到我优化项目.我已经发现,在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);
});
Run Code Online (Sandbox Code Playgroud)
非常整洁,非常错误,因为在DOM准备好之前app并行加载domReady.
我如何解决它?
谢谢.
编辑
我想我已经理解了我们的问题.app依赖项的构造函数不应运行任何DOM依赖代码.他们应该只返回函数,捕获DOM依赖逻辑.该逻辑应该从中执行app.initialize,保证在DOM准备好时运行.
也许我错过了一些东西,但是你不会通过这样做来让你的生活变得更轻松:
require(['jQuery', 'app' ], function(jQuery, app) {
jQuery(function ($) {
app.initialize();
});
});
Run Code Online (Sandbox Code Playgroud)
在你的main.js?
通过在domReady回调函数中要求应用程序,您应该能够同步地需要domReady模块和app模块.
define(['require', 'domReady'], function(require, domReady) {
domReady(function() {
require(['app'], function(app) {
app.initialize();
});
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13107 次 |
| 最近记录: |