2013-08-13 3 views
5

Ho trovato che in teoria ko.cleanNode() dovrebbe rimuovere i collegamenti dal nodo se chiamato, ma in this example non sembra funzionare.Come rimuovere i binding dal nodo in knockout?

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); 

Risultato: Si può vedere in jsFiddle, quel nodo ancora ha allegato vincolante (listener di eventi).

+0

I binding KO standard non tengono traccia degli ascoltatori di eventi come tali. 'cleanNode' rimuove i" binding interni ". Vedi http://stackoverflow.com/a/15069509/2246674 - Ho trovato la cosa migliore per giocare semplicemente con KO perché vuole essere giocato con. – user2246674

risposta

7

Knockout rimuove i collegamenti relativi al knockout dal nodo, ma quando lo fa, non ripristina i valori vuoti del nodo. Interrompe semplicemente l'aggiornamento automatico del nodo da viewmodel, vm.

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

Estrarre la linea 21 del violino aggiornato.

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

Si dovrebbe vedere quando lo si esegue, il nome è ora 'imnotbinding'.

+0

Grazie, non ho pensato a quello per dire. – skmasq

+5

Does 'cleanNode' funziona se ha passato un elemento che contiene più binding nidificati o richiede il nodo e il binding stesso? – raffian