基本的に、異なるオブジェクトに対して同じページにバインディングを再適用したいのですが、奇妙な動作があります。バインディングを再適用すると、アイテムのリストが失われます。
こちらをご覧ください: http://jsfiddle.net/baio/9UcUs/5/
何をすべきか?
基本的に、異なるオブジェクトに対して同じページにバインディングを再適用したいのですが、奇妙な動作があります。バインディングを再適用すると、アイテムのリストが失われます。
こちらをご覧ください: http://jsfiddle.net/baio/9UcUs/5/
何をすべきか?
短い答えは、サポートされていないということです。長い答えは、それを回避する方法がいくつかあるということです。cleanNode
1 つの方法はbeforeを呼び出すことですapplyBindings
が、これはイベント ハンドラーをクリアしません。もう 1 つの方法は、ビュー モデルをオブザーバブルでラップし、そのオブザーバブルを更新してバインディングを再適用することです。これははるかにうまく機能しますが、まだ少し問題があります (以下を参照)。
観察可能なビュー モデル メソッドを使用した例を次に示します: http://jsfiddle.net/mbest/9UcUs/9/
監視可能なビュー モデルを使用する際に私が見つけた唯一の問題は、イベント ハンドラーが新しいビュー モデルで完全に更新されていないことです。これらは新しいビュー モデルで正しい関数を呼び出しますが、this
とのdata
値は元のビュー モデルのものになります。
編集:
Knockout 3.0 (現在、今月リリース予定) は、監視可能なビュー モデルを完全にサポートします。カスタムバインディングにはまだ問題がある可能性がありますが、うまくいけば、これらすべてがすぐに文書化されます.
同じビューモデルを異なる要素にバインドできます。バインドを適用する要素を指定する必要があります。
ko.applyBindings(vm, $('#yourul'));
ko.applyBindings(vm, $('#div'));