使用以下代碼,輸入#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進行了更改。這肯定會引起問題,例如在隨后再次綁定元素時將多個處理程序附加到一個元素。
因此,我不建議使用此模式。更好的模式是使用節with
或template
節周圍的綁定,并允許使用新的綁定重新渲染它。

慕后森
TA貢獻1802條經驗 獲得超5個贊
我發現的一個合法用例是在測試綁定或組件時。我的afterEach函數清除包含綁定測試設置的元素,然后在其上運行cleanNode以使KO忘記它。然后,我可以開始下一個beforeEach,再次設置綁定以進行測試。這樣,我就完全封裝了測試。
添加回答
舉報
0/150
提交
取消