backbone.js - Backbone 、RequireJS 和树

标签 backbone.js circular-dependency requirejs amd

我正在将类别 TreeView 重写为 RequireJS 和 Backbone 应用程序。

结构很简单:每个类别都包含一组子类别。

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

在 RequireJS 文档中有关于循环依赖的简短说明:

http://requirejs.org/docs/api.html#circular

但是,我似乎遗漏了一些东西,因为我仍然遇到未定义和/或错误。我认为在示例中只看到“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();
            }
        };
    }
);

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

关于backbone.js - Backbone 、RequireJS 和树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8997335/

相关文章:

c++ - 解决由于类之间的循环依赖而导致的构建错误

angular - 生成 Angular 库时的循环依赖

javascript - 创建需要 JS 模块,主干

backbone.js - 使用 require.js 和 jasmine 加载返回 404 的脚本

javascript - 需要 js jquery 插件

javascript - 使用键按字母顺序对 Backbone 集合进行排序

javascript - 将三元运算符转换为传统 if 语句时 undefined variable

python - 检测python中的循环依赖

backbone.js - 如何从 Backbone .js中的 View 访问模型数据

javascript - Backbone 模型 .changedAttributes() 未显示所有更改