【问题标题】:Backbone, RequireJS, and Tree骨干网、RequireJS 和树
【发布时间】:2012-02-18 07:40:16
【问题描述】:

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

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

但是,循环依赖问题很快就会显现出来。类别模型需要类别集合,类别集合需要类别模型。

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

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

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

有没有人能提供一个简单的例子来澄清一下?那个,或者一个不需要循环依赖的更好的结构化方法。

【问题讨论】:

  • 循环依赖有什么用?正如 require.js 文档中所写:“循环依赖很少见,通常表明您可能需要重新考虑设计”。
  • 是的,这是真的。但是,我概述了上面的结构。如果您可以提供不是递归/循环依赖的树结构,请提供该示例。
  • 抱歉,乍一看我没有正确理解您的设计。所以a)正在使用某物。喜欢类别和子类别的问题? b) 你见过这些:stackoverflow.com/questions/6150378/… & stackoverflow.com/questions/6026752/…。 c)我认为这可能会有所帮助,如果您添加当前代码来澄清问题。
  • 感谢您列出这些问题。这些与这种情况有点不同,但仍然是很好的信息。我想我真的找到了问题所在。我现在正试图赶上最后期限。我会在接下来的一两天内发布我的解决方案(一旦热量稍微升高)。

标签: backbone.js circular-dependency requirejs amd


【解决方案1】:

由于循环引用,当 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();
            }
        };
    }
);

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-05
    相关资源
    最近更新 更多