require.jsが "a"の前提条件として "b"をロードしているとき、aがinitModule()
にまだ呼び出されていないため、 "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();
}
};
}
);
ところで、それは必ずしもそうではありません。たとえば、ウィジェットファクトリモジュールを実装しました。これは、とりわけ、コンテンツを作成するためにファクトリを参照しなければならない「コンテナウィジェット」モジュールを参照しました。完璧に合法です。
あなたは循環依存性が必要ですか? require.jsドキュメントに書かれているように、「循環依存関係はまれであり、通常はデザインを再考したいという兆候です。 – SunnyRed
はい、これは当てはまります。しかし、私は上記の構造を概説しました。再帰/循環依存でないツリー構造を提供できる場合は、その例を提供してください。 –
Sry、私は一目ぼれに正しくデザインを理解していませんでした。したがって、a)はsthを使用しています。問題のようなカテゴリとサブカテゴリ? b)あなたはこれらを見たことがありますか:http://stackoverflow.com/questions/6150378/backbone-with-a-tree-view-widget&http://stackoverflow.com/questions/6026752/backbone-collections-representing-ツリーデータ。 c)問題を明確にするために現在のコードを追加すると、役立つと思います。 – SunnyRed