2013-08-13 3 views
5

이론상으로 ko.cleanNode()이 호출되면 노드에서 바인딩을 제거해야하지만, this example은 작동하지 않는 것으로 나타났습니다.녹아웃 노드에서 바인딩을 제거하는 방법?

자바 스크립트 :

// 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

관련 문제