Javascript 如何在knockout中从节点移除绑定?

Javascript 如何在knockout中从节点移除绑定?,javascript,jquery,events,knockout.js,Javascript,Jquery,Events,Knockout.js,我发现理论上ko.cleanNode()应该在调用时从节点中删除绑定,但在中它似乎不起作用 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

我发现理论上
ko.cleanNode()
应该在调用时从节点中删除绑定,但在中它似乎不起作用

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);
//视图模型
var vm={
姓名:ko.observable(“约翰”)
}
//要添加的节点
变量节点=$(“”{
id:“测试”,
“数据绑定”:“文本:名称()
});
//首次添加到正文中
$(“正文”).append(节点);
//应用绑定
ko.应用绑定(vm,$(“#测试”)[0]);
//除去
ko.cleanNode($(“#测试”)[0]);
$(“#测试”).remove();
$(“正文”).append(节点);

结果:您可以在中看到,该节点仍然具有附加的绑定(事件侦听器)。

Knockout正在从节点中删除与敲除相关的绑定,但当它这样做时,不会将节点重置为空值。它只是停止从viewmodel vm自动更新节点

取出更新的小提琴的第21行

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

运行时应该会看到,名称现在是“imnotbinding”。

标准KO绑定不会跟踪事件侦听器本身
cleanNode
删除“内部绑定”。请参阅-我发现最好只是按照KO的意愿使用它。谢谢,我没有想到这一点。如果传递了一个包含多个嵌套绑定的元素,
cleanNode
是否有效,或者它是否需要节点和绑定本身?