使用以下代碼,輸入#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