0

我有一个名为 的 Backbone 应用程序模块app.js,它看起来像这样:

// 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模块?

4

1 回答 1

0

然后,您应该创建两个模块app:事件管理器和初始化程序

问题是你的app模块不是模块化的(它没有一个任务/关注点),它是一堆代码放在一起。

顺便说一句,从 Backbone 0.9.9 开始,Backbone对象是一个全局事件管理器。另外,创建自己的非常容易:_.extend({}, Backbone.Events).

于 2013-03-15T17:57:01.767 回答