我正在编写一个小应用程序(initApp.js
、initApp.routinj.js
、initApp.controller.js
),模块需要使用requires来加载。
这是我的代码 (*)。
在每个模块中使用 console.log
我发现模块的加载顺序如下:
1) initController
2) initRouting
3) initApp
这个顺序正确吗?
现在还有一个问题。
在 initApp.controller.js
中,我需要访问 initHeader
和 initSidebar
等函数(在 initApp.js
中定义) ).
但正如您从我的代码(initApp.controller.js
)中看到的,console.log('initController', app);
返回undefined
.
为了解决这个问题,我在 initApp.controller.js
中定义了函数 getApp
。
但可以肯定的是,有更好的方法来完成这项任务。
有什么想法吗?
谢谢
(*)
** main.js **
define([
'js/app',
'js/init/initApp',
// 'js/tasks/tasksApp'
],
function (App)
{
"use strict";
App.initialize();
});
** initApp.js **
/*global define*/
define([
'backbone',
'js/app',
'js/init/initApp.routing',
'js/init/views/sidebarView',
'js/init/views/headerView',
],
function (Backbone, App, Router, SidebarView, HeaderView)
{
"use strict";
console.log('initApp', Router)
var initApp = new Backbone.Marionette.Application({
initHeader: function ()
{
var headerView = new HeaderView();
App.header.show(headerView);
},
initSidebar: function ()
{
var sidebarView = new SidebarView();
App.sidebar.show(sidebarView);
}
});
return initApp;
});
** initApp.routin,js **
/*global define*/
define([
'backbone',
'marionette',
'js/init/initApp.controller'
],
function(Backbone, Marionette, controller)
{
"use strict";
console.log('initRouting', controller)
var Router = Backbone.Marionette.AppRouter.extend({
appRoutes: {
'*defaults': 'index'
}
});
return new Router({
controller: controller
});
});
** initApp.controller.js **
/*global define*/
define([
'js/init/initApp'
],
function(app)
{
"use strict";
console.log('initController', app); // undefined
var getApp = function () {
var initApp;
require(['js/init/initApp'], function (app) {
initApp = app;
});
return initApp;
};
var controller = {
index: function ()
{
var app = getApp();
app.initHeader();
app.initSidebar();
}
}
return controller;
});
最佳答案
不确定这是否是实现事物的正确方法,但是,就您而言,如果您按此顺序加载模块,它将可以工作。
1) initApp
2) initController
3) initRouting
所以这意味着你的 main.js
应该是:
define([
'js/app',
'js/init/initApp.routing'
],
function (App)
{
"use strict";
App.initialize();
});
关于javascript - 如何使用 requireJs 以正确的顺序定义 Controller 、路由器和应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11070038/