循環依存関係を持つビュー モデルがあるとします。通常の状況ではこれを避けるべきであることはわかっていますが、この場合は、自分で制御できないため、できないと想定してください。親と子は相互に参照します。以下は、簡潔にするために非常に単純化された例です。
HTML:
<div id="root">
<div data-bind="text: parent.childName()"></div>
</div>
JS:
var page = {};
page.parent =
{
name: ko.observable('parent'),
childName: ko.computed(function() { return page.child.name(); })
};
page.child =
{
name: ko.observable('child'),
parentName: ko.computed(function() { return page.parent.name(); })
};
ko.applyBindings(page, document.getElementById('root') );
問題はko.computed
、最初の初期化時に実行されることです。すべての瞬間にのみ実行される場合は、applyBindings
まったく問題ありません。
1 つの解決策は、ko.computed を完全に削除し、単純な通常の関数を使用することです。これらは、applyBindings の時点でのみ実行されます。問題はもちろん、キャッシュ機能などを失うなど、ko.computed の他のすべての利点を失うことです。
計算されたオブザーバブルがそのapplyBindings
フェーズでのみ初期化を開始すると言う方法はありますか?