シナリオ
RequireJS と KnockoutJS を使用してウィジェットを作成しています。ウィジェットはko.applyBindings(widgetViewModel, thisWidget)
、インスタンス化されたときに呼び出します。ウィジェットは、サイトが Knockout 自体を使用しているかどうかに関係なく、サイトで使用できる必要があります。
問題
Knockout を使用するサイトにウィジェットをドロップすると、ウィジェットのko.applyBindings(siteViewModel)
セットアップ後にサイトが呼び出されると、間違ったビュー モデルがウィジェットに適用されます。ウィジェットはsiteViewModel
、目的の代わりに取得しますwidgetViewModel
。
これまでに試したこと
ko.applyBindings(siteViewModel)
ウィジェットのセットアップ前に発生するように呼び出しを並べ替えます。 これは機能しますが、ウィジェットの呼び出し方法に制限がかかるため、理想的ではありません。正しいバインディング コンテキストを適用するウィジェットのカスタム バインディングを追加します (つまり
widgetViewModel
、ウィジェットに返されます{controlsDescendantBindings: true};
。残念ながら、サイトで使用される Knockout インスタンスは、ウィジェットで使用されるものと同じではありません (Require のため)。おそらくグローバル名前空間を調べて、サイトのインスタンスにアクセスします。