2013-08-13 9 views
5

私は、理論では、呼び出された場合、ノードからバインディングを削除する必要があることを発見しましたが、this exampleで動作していないようです。ノックアウトのノードからバインディングを削除するには?

Javascriptを:

// View model 
var vm = { 
    name: ko.observable("John") 
} 

// Node to be added 
var node = $("<div/>",{ 
    id: "testing", 
    'data-bind' : "text: name()" 
}); 

// First addition to body 
$("body").append(node); 

// Apply bindings 
ko.applyBindings(vm,$("#testing")[0]); 

// Remove 
ko.cleanNode($("#testing")[0]); 

$("#testing").remove(); 

$("body").append(node); 

結果:あなたはjsFiddleで見ることができ、そのノードがまだ(イベントリスナー)を結合添付しました。

+0

標準のKOバインディングでは、イベントリスナーをそのまま追跡しません。 'cleanNode'は" internal bindings "を削除します。 http://stackoverflow.com/a/15069509/2246674を参照してください - 私はそれが再生されるように単にKOで遊ぶことが最良であることを発見しました。 – user2246674

答えて

7

ノックアウトはノックアウト関連のバインディングをノードから削除しますが、ノックアウト関連のバインディングをノードから空の値にリセットしません。これは、viewmodel、vmから自動的にノードの更新を停止するだけです。

http://jsfiddle.net/BrsmC/2/

更新フィドルの21行を取り出します。

ko.cleanNode($("#testing")[0]); 

実行すると、名前は「imnotbinding」になります。

+0

ありがとうございました。 – skmasq

+5

'cleanNode'は、複数のネストされたバインディングを含む要素が渡された場合、またはノードとバインディング自体が必要な場合は動作しますか? – raffian

関連する問題