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
Backbone.js 主干、RequireJS和树_Backbone.js_Circular Dependency_Requirejs_Amd - Fatal编程技术网

Backbone.js 主干、RequireJS和树

Backbone.js 主干、RequireJS和树,backbone.js,circular-dependency,requirejs,amd,Backbone.js,Circular Dependency,Requirejs,Amd,我正在将一个类别树视图重写为一个RequireJS和主干应用程序 结构很简单:每个类别都包含子类别的集合 然而,循环依赖性问题很快变得明显。类别模型需要类别集合,类别集合需要类别模型 在RequireJS文档中有关于循环依赖关系的快速宣传: 然而,我似乎遗漏了一些东西,因为我仍然得到未定义和/或错误。我认为仅仅看到例子中的“b”而不是“a”让我无法理解 有没有人能提供一个简单的例子来澄清?这是一种不需要循环依赖项的更好的结构方式。由于循环引用,当require.js加载“b”作为“a”的先决条

我正在将一个类别树视图重写为一个RequireJS和主干应用程序

结构很简单:每个类别都包含子类别的集合

然而,循环依赖性问题很快变得明显。类别模型需要类别集合,类别集合需要类别模型

在RequireJS文档中有关于循环依赖关系的快速宣传:

然而,我似乎遗漏了一些东西,因为我仍然得到未定义和/或错误。我认为仅仅看到例子中的“b”而不是“a”让我无法理解


有没有人能提供一个简单的例子来澄清?这是一种不需要循环依赖项的更好的结构方式。

由于循环引用,当require.js加载“b”作为“a”的先决条件时,它无法返回“a”的值,因为a的
initModule()
尚未被调用。但是,在调用
b.somethingElse()
时,模块“a”已经初始化,并且
require(“a”)
调用将返回

下面的代码显示了这两个模块内部的内容—加载顺序并不重要。我对require.js示例做了一些修改,使其更加明显

// Inside a.js:
define(["require", "b"],
    function initModule(require) {
        return {
            doSomehingWithA: function() { ...},
            doSomethingElse: function(title) {
                // by the time this function is called,
                // require("b") will properly resolve
                return require("b").doSomethingWithB();
            }
        }
    }
);

// Inside b.js:
define(["require", "a"],
    function initModule(require) {
        return {
            doSomethingWithB: function() {...},
            doSomethingElse: function(title) {
                // by the time this function is called,
                // require("a") will properly resolve
                return require("a").doSomethingWithA();
            }
        };
    }
);

顺便说一句,虽然在一般情况下,循环引用是糟糕设计的征兆,但情况并非总是如此。例如,我实现了一个小部件工厂模块,其中引用了一个“容器小部件”模块,然后该模块必须引用工厂才能创建其内容。完全合法。

为什么需要循环依赖项?正如require.js文档中所写的:“循环依赖关系很少见,通常是一种迹象,表明您可能需要重新考虑设计”。是的,这是真的。然而,我概述了上述结构。如果您可以提供一个不是递归/循环依赖的树结构,请提供该示例。Sry,我第一眼就没有正确理解您的设计。那么a)使用诸如类别和子类别之类的东西是不可能的吗?b) 你见过这些吗&。c) 我认为如果你添加你当前的代码来澄清这个问题,这会有所帮助。谢谢你列出这些问题。这与目前的情况有些不同,但仍然是一个很好的信息。我想我已经找到了问题所在。我现在正处于“区域”之中,正努力赶上最后期限。我会在第二天或第二天发布我的解决方案(一旦温度升高一点)。