我有一个名为app.js
的Backbone应用程序模块,它看起来像这样:
// module: app
define([
'Marionette',
'collections/links'
], function (Marionette, Links) {
var app = Marionette.Application()
app.addInitializer(function () {
new Links()
})
return app
})
app
模块创建Marionette.Application
的实例并添加适当的初始化程序。其中之一是创建我的Links
集合的实例。
但是,我的collections/links
模块依赖于app
模块作为其观察者系统。
// 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似乎在加载collections/links
之前初始化app
模块。
如何使用AMD设计我的应用程序,以便app
可以使用我的collections/links
模块,collections/links
可以使用我的app
模块?
答案 0 :(得分:0)
然后,您应该从app
创建两个模块:事件管理器和初始化程序。
问题是你的app
模块不是模块化的(它没有一个任务/关注点),它是一堆代码汇集在一起。
BTW,从Backbone 0.9.9开始,Backbone
对象是一个全局事件管理器。另外,创建自己的非常简单:_.extend({}, Backbone.Events)
。