可以cleanNode()用来清洁绑定?(Can cleanNode() be used to cl

2019-07-20 11:46发布

下面的代码,输入#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>

Answer 1:

ko.cleanNode通过敲除内部用于清理数据/ computeds它所创建相关的元素。 它不会被绑定删除添加任何事件处理程序,或者如果绑定修改了DOM一定了解。 这肯定会导致像具有连接到当它被随后再次结合的元件多个处理程序的问题。

所以,我不建议使用这种模式。 更好的方式是使用withtemplate周围部分结合,并允许其重新呈现新的绑定。



文章来源: Can cleanNode() be used to clean binding?
标签: knockout.js