Architecture AMD:有两个相互依赖的模块
我有一个主干应用程序模块,名为Architecture AMD:有两个相互依赖的模块,architecture,requirejs,amd,Architecture,Requirejs,Amd,我有一个主干应用程序模块,名为app.js,看起来像这样: // module: app define([ 'Marionette', 'collections/links' ], function (Marionette, Links) { var app = Marionette.Application() app.addInitializer(function () { new Links() }) return app }) app模块创建一个m
app.js
,看起来像这样:
// module: app
define([
'Marionette',
'collections/links'
], function (Marionette, Links) {
var app = Marionette.Application()
app.addInitializer(function () {
new Links()
})
return app
})
app
模块创建一个marionete.Application
的实例,并添加相应的初始化器。其中之一是创建我的链接
集合的实例
但是,mycollections/links
模块依赖于其观察者系统的应用程序
模块
// module: collections/links
define([
'app',
'Backbone'
], function (app, Backbone) {
var Links = Backbone.Collection.Extend({
initialize: function () {
// Outputs undefined
console.log(app)
// This then wouldn't work because app hasn't been initialised:
// app.on('someEvent', function () {})
}
})
return Links
})
由于此模块被列为app
的依赖项,而app
是此模块的依赖项,因此我发现自己具有递归依赖项。最后,RequireJS似乎在加载app
之前初始化了collections/links
模块
我如何使用AMD设计我的应用程序,以便
app
可以使用我的集合/链接
模块和集合/链接
可以使用我的app
模块?然后,您应该从app
中创建两个模块:事件管理器和初始值设定项
问题是你的应用程序模块不是模块化的(它没有一个任务/关注点),而是一堆代码组合在一起
顺便说一句,从主干网0.9.9开始,主干网
对象是一个全局事件管理器。另外,创建您自己的是非常容易的:.extend({},Backbone.Events)