为了账号安全,请及时绑定邮箱和手机立即绑定

可以使用cleanNode()清除绑定吗?

可以使用cleanNode()清除绑定吗?

使用以下代码,输入#p_in将随着输入#s_in的更改而更新。但是我已经使用了cleanNode(sec)。任何人都可以帮助您理解为什么不清除绑定。    <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>
查看完整描述

2 回答

?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

ko.cleanNode由Knockout在内部使用,以清理它创建的与元素相关的数据/计算。它不会删除绑定添加的任何事件处理程序,也不会了解绑定是否对DOM进行了更改。这肯定会引起问题,例如在随后再次绑定元素时将多个处理程序附加到一个元素。

因此,我不建议使用此模式。更好的模式是使用节withtemplate节周围的绑定,并允许使用新的绑定重新渲染它。


查看完整回答
反对 回复 2019-12-04
?
慕后森

TA贡献1802条经验 获得超5个赞

我发现的一个合法用例是在测试绑定或组件时。我的afterEach函数清除包含绑定测试设置的元素,然后在其上运行cleanNode以使KO忘记它。然后,我可以开始下一个beforeEach,再次设置绑定以进行测试。这样,我就完全封装了测试。

查看完整回答
反对 回复 2019-12-04
  • 2 回答
  • 0 关注
  • 575 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信