2013-08-13 34 views
5

Tôi đã tìm thấy rằng trong lý thuyết ko.cleanNode() nên loại bỏ các ràng buộc khỏi nút nếu được gọi, nhưng trong this example nó dường như không hoạt động.Làm thế nào để loại bỏ các ràng buộc từ nút trong loại trực tiếp?

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

Kết quả: Bạn có thể nhìn thấy trong jsFiddle, nút đó vẫn gắn ràng buộc (event listener).

+0

Ràng buộc KO tiêu chuẩn không theo dõi người nghe sự kiện như vậy. 'cleanNode' loại bỏ các" ràng buộc nội bộ ". Xem http://stackoverflow.com/a/15069509/2246674 - Tôi đã tìm thấy nó tốt nhất để chỉ chơi với KO như nó muốn được chơi với. – user2246674

Trả lời

7

Loại bỏ loại bỏ các ràng buộc liên quan đến loại trực tiếp từ nút, nhưng khi thực hiện như vậy, nó không đặt lại nút thành giá trị trống. Nó chỉ dừng cập nhật nút tự động từ viewmodel, vm.

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

Đi ra dòng 21 của fiddle cập nhật.

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

Bạn sẽ thấy khi bạn chạy, tên hiện là 'imnotbinding'.

+0

Cảm ơn, không nghĩ về điều đó mỗi lần nói. – skmasq

+5

Công việc 'cleanNode' có hoạt động nếu thông qua một phần tử có chứa nhiều liên kết lồng nhau, hay nó yêu cầu nút và ràng buộc chính nó? – raffian

Các vấn đề liên quan