【问题标题】:How to remove bindings from node in knockout?如何在淘汰赛中从节点中删除绑定?
【发布时间】:2013-08-14 11:15:56
【问题描述】:

我发现理论上ko.cleanNode() 应该在调用时从节点中删除绑定,但在 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 中看到,该节点仍然具有附加绑定(事件侦听器)。

【问题讨论】:

  • 标准 KO 绑定不跟踪事件监听器。 cleanNode 删除“内部绑定”。请参阅stackoverflow.com/a/15069509/2246674 - 我发现最好的方式是简单地与 KO 一起玩。

标签: javascript jquery events knockout.js


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 谢谢,没想到这么说。
  • 如果传递一个包含多个嵌套绑定的元素,cleanNode 是否有效,还是需要节点和绑定本身?
猜你喜欢
  • 2016-03-15
  • 2013-05-04
  • 2023-04-03
  • 2013-02-04
  • 1970-01-01
  • 1970-01-01
  • 2013-10-31
  • 2013-08-14
  • 1970-01-01
相关资源
最近更新 更多