Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用backbone.marionete和requireJs的web应用程序的循环依赖项_Javascript_Backbone.js_Requirejs_Marionette_Backbone Routing - Fatal编程技术网

Javascript 使用backbone.marionete和requireJs的web应用程序的循环依赖项

Javascript 使用backbone.marionete和requireJs的web应用程序的循环依赖项,javascript,backbone.js,requirejs,marionette,backbone-routing,Javascript,Backbone.js,Requirejs,Marionette,Backbone Routing,我的情况如下 我使用requireJs加载模块,我不想使用全局变量 main.js负责加载路由器。 然后路由器加载应用程序,应用程序加载多个子应用程序 初始化所有内容后,子应用程序需要路由器来制作路由器。导航 下面是模式: main.js -> router -> app -> subApp -> router main.js -> router -> app -> subApp -> router 然后我有一个循环依赖的问题,因此子应用中的

我的情况如下

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

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

初始化所有内容后,子应用程序需要
路由器
来制作
路由器。导航

下面是模式:

main.js -> router -> app -> subApp -> router
 main.js -> router -> app -> subApp -> router
然后我有一个循环依赖的问题,因此子应用中的路由器将是未定义的

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

子应用程序可以引发路由器处理的事件,而不是对路由器有明确的依赖关系。在我的项目中,我使用以下依赖关系:main.js->app->router->Subapp

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

define([...], function(...) {
return {
  initialize: function() {
    window.MyApp = new Backbone.Marionette.Application();
    // ...
    MyApp.start();
  }
};
});
这使得从任何地方访问我的应用程序区域以及在一个名称空间中存储全局状态信息变得极其容易

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

模式:

main.js -> router -> app -> subApp -> router
 main.js -> router -> app -> subApp -> router
这是对的

如果您正在使用,为了从应用程序和子应用程序访问路由器,而不使用
global var
,您应该以以下方式在路由器中启动应用程序:




您说子应用程序可以引发事件,但会引发到哪个模块?如果我尝试从subApp导入应用程序,我会遇到同样的循环依赖性问题。我认为requirejs应该正确处理循环依赖性。。。(我真的不知道。我不喜欢requirejs)不,不喜欢。它不会告诉你这是一个循环依赖-事情只是停止工作,一些引用变得未定义。应用程序不应该把自己传递给路由器吗?路由器会启动应用程序,这似乎很奇怪。如果你有多个路由器呢@安托伊斯