Backbone.js 主干、RequireJS和树
我正在将一个类别树视图重写为一个RequireJS和主干应用程序 结构很简单:每个类别都包含子类别的集合 然而,循环依赖性问题很快变得明显。类别模型需要类别集合,类别集合需要类别模型 在RequireJS文档中有关于循环依赖关系的快速宣传: 然而,我似乎遗漏了一些东西,因为我仍然得到未定义和/或错误。我认为仅仅看到例子中的“b”而不是“a”让我无法理解Backbone.js 主干、RequireJS和树,backbone.js,circular-dependency,requirejs,amd,Backbone.js,Circular Dependency,Requirejs,Amd,我正在将一个类别树视图重写为一个RequireJS和主干应用程序 结构很简单:每个类别都包含子类别的集合 然而,循环依赖性问题很快变得明显。类别模型需要类别集合,类别集合需要类别模型 在RequireJS文档中有关于循环依赖关系的快速宣传: 然而,我似乎遗漏了一些东西,因为我仍然得到未定义和/或错误。我认为仅仅看到例子中的“b”而不是“a”让我无法理解 有没有人能提供一个简单的例子来澄清?这是一种不需要循环依赖项的更好的结构方式。由于循环引用,当require.js加载“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) 我认为如果你添加你当前的代码来澄清这个问题,这会有所帮助。谢谢你列出这些问题。这与目前的情况有些不同,但仍然是一个很好的信息。我想我已经找到了问题所在。我现在正处于“区域”之中,正努力赶上最后期限。我会在第二天或第二天发布我的解决方案(一旦温度升高一点)。