8

我处于以下情况。

我正在使用 requireJs 加载模块,我不想使用全局变量。

main.js 负责加载路由器。
然后路由器加载应用程序,应用程序加载几个子应用程序。

一切都初始化后,子应用程序需要router制作router.navigate.

这里的架构:

main.js -> router -> app -> subApp -> router

然后我遇到了循环依赖问题,因此 subApp 中的路由器将未定义。

重组我的代码或解决此问题的最佳方法是什么?有没有这方面的例子?

4

3 回答 3

5

架构:

 main.js -> router -> app -> subApp -> router

是正确的。

如果您使用的是主干.marionette,为了从应用程序和子应用程序访问路由器,而不使用global var,您应该以这种方式在路由器中启动应用程序:


// router.js
YourApp.start(router: router);

// app.js
YourApp.addInitializer(function(options){
  // do useful stuff here
  var myView = new MyView({
    router: options.router
  });
  YourApp.mainRegion.show(myView);
});
于 2012-07-03T07:35:50.090 回答
2

在我的项目中,我使用以下依赖项:main.js -> app -> router -> subApp。

在 app.js 中,我创建了一个包含指向我的应用程序的指针的全局变量:

define([...], function(...) {
return {
  initialize: function() {
    window.MyApp = new Backbone.Marionette.Application();
    // ...
    MyApp.start();
  }
};
});

这使得从任何地方访问我的应用程序区域以及将全局状态信息存储在一个名称空间中变得非常容易。

起初我尝试在没有全局应用程序的情况下这样做,但最终放弃了,发现这种方法更加灵活。

于 2012-06-30T20:59:29.003 回答
2

子应用可以引发路由器处理的事件,而不是显式依赖路由器

于 2012-06-29T22:48:31.123 回答