使用以下代码,输入#p_in将随输入#s_in的更改而更新。但我使用了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>
答案 0 :(得分:30)
ko.cleanNode
来清理它创建的与元素相关的数据/计算。它不会删除绑定添加的任何事件处理程序,也不会理解绑定是否对DOM进行了更改。这肯定会引起一些问题,比如在随后再次绑定元素时将多个处理程序附加到元素上。
所以,我不建议使用这种模式。一个更好的模式是在一个部分周围使用with
或template
绑定,并允许使用新绑定重新渲染它。