使用以下代码,输入#p_in将随着输入#s_in的更改而更新。但我已经使用了cleanNode(秒)。任何人都可以帮助理解为什么绑定不被清除。可以用cleanNode()来清理绑定吗?
<input id="p_in" data-bind="value: name"></input>
<input id="s_in" data-bind="value: name"></input>
<input id="cb" type="checkbox">same</input>
<script type="text/javascript">
function AddrDataSet (name) {
this.name = ko.observable(name);
};
var primary_set = new AddrDataSet('p');
var sec_set = new AddrDataSet('s');
var pri = $('#p_in')[0];
var sec = $('#s_in')[0];
ko.applyBindings(primary_set, pri);
ko.applyBindings(sec_set, sec);
ko.cleanNode(sec); // clean it
ko.applyBindings(primary_set, sec); // bind it to primary_set
ko.cleanNode(sec); // clean it again
</script>
cleanNode实际上是一个内部API。目前没有专门的文档。 – 2013-02-28 13:01:12
@RPNiemeyer能否详细说明“with”关键字如何解决这个问题?我处于类似的情况,并打开/关闭子模式窗口,我需要避免多次调用应用绑定。 – 2014-04-08 20:04:58
我发现的一个合法用例是在测试绑定或组件时。我的afterEach函数清除了包含绑定测试设置的元素,然后在其上运行cleanNode以使KO将其忽略。然后我可以在每个之前开始下一个,再次设置测试绑定。这样我就完全封装了测试。 – 2015-11-26 15:18:07