У меня есть модуль приложения Backbone под названием app.js
, который выглядит примерно так:AMD: Наличие двух модулей зависят друг от друга
// 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
?