8

基本的に、異なるオブジェクトに対して同じページにバインディングを再適用したいのですが、奇妙な動作があります。バインディングを再適用すると、アイテムのリストが失われます。

こちらをご覧ください: http://jsfiddle.net/baio/9UcUs/5/

何をすべきか?

4

3 に答える 3

7

短い答えは、サポートされていないということです。長い答えは、それを回避する方法がいくつかあるということです。cleanNode1 つの方法はbeforeを呼び出すことですapplyBindingsが、これはイベント ハンドラーをクリアしません。もう 1 つの方法は、ビュー モデルをオブザーバブルでラップし、そのオブザーバブルを更新してバインディングを再適用することです。これははるかにうまく機能しますが、まだ少し問題があります (以下を参照)。

観察可能なビュー モデル メソッドを使用した例を次に示します: http://jsfiddle.net/mbest/9UcUs/9/

監視可能なビュー モデルを使用する際に私が見つけた唯一の問題は、イベント ハンドラーが新しいビュー モデルで完全に更新されていないことです。これらは新しいビュー モデルで正しい関数を呼び出しますが、thisとのdata値は元のビュー モデルのものになります。

編集:

Knockout 3.0 (現在、今月リリース予定) は、監視可能なビュー モデルを完全にサポートします。カスタムバインディングにはまだ問題がある可能性がありますが、うまくいけば、これらすべてがすぐに文書化されます.

于 2012-09-07T10:50:16.960 に答える
5

同じビューモデルを異なる要素にバインドできます。バインドを適用する要素を指定する必要があります。

ko.applyBindings(vm, $('#yourul'));

ko.applyBindings(vm, $('#div'));
于 2012-09-08T09:05:57.843 に答える