4

カテゴリ ツリー ビューを RequireJS と Backbone アプリに書き直しています。

構造は単純です。各カテゴリには、子カテゴリのコレクションが含まれています。

ただし、循環依存の問題はすぐに明らかになります。カテゴリ モデルにはカテゴリ コレクションが必要であり、カテゴリ コレクションにはカテゴリ モデルが必要です。

RequireJS のドキュメントには、循環依存に関する簡単な説明があります。

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

ただし、まだ未定義やエラーが発生しているため、何かが足りないようです。例で「a」ではなく「b」を見るだけで、理解できなくなっていると思います。

明確にする簡単な例を提供できる人はいますか? それ、または循環依存関係を必要としないこれを構造化するより良い方法。

4

1 に答える 1

2

initModule()循環参照のため、require.jsが「a」の前提条件として「b」をロードしている場合、aはまだ呼び出されていないため、「a」の値を返すことはできません。ただし、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();
            }
        };
    }
);

ところで、一般的に循環参照は悪い設計の兆候ですが、常にそうであるとは限りません。たとえば、ウィジェットファクトリモジュールを実装しました。このモジュールは、特に「コンテナウィジェット」モジュールを参照し、コンテンツを作成するためにファクトリを参照する必要がありました。完全に合法です。

于 2012-02-14T05:31:05.480 に答える