我正在將功能構建到用戶可以多次執行的網頁上。通過用戶的操作,使用ko.applyBindings()創建對象/模型並將其應用於HTML。如何清除/刪除Knockout.js中的可觀察綁定?
數據綁定HTML通過jQuery模板創建。
到目前爲止這麼好。
當我重複此步驟通過創建一個第二對象/模型並調用ko.applyBindings()我遇到兩個問題:
- 的標記示出了以前的對象/模型以及新對象/模型。
- 與對象/模型中的其中一個屬性發生javascript錯誤,雖然它仍然呈現在標記中。
爲了解決這個問題,在第一次傳遞之後,我調用jQuery的.empty()來移除包含所有數據綁定屬性的模板HTML,以便它不再位於DOM中。當用戶啓動第二遍的進程時,數據綁定的HTML被重新添加到DOM。但是正如我所說的,當HTML被重新添加到DOM並重新綁定到新的對象/模型時,它仍然包含來自第一個對象/模型的數據,並且我仍然得到JS錯誤在第一階段不會發生。
結論似乎是Knockout堅持這些綁定的屬性,即使標記從DOM中刪除。
所以我在找的是從Knockout中移除這些綁定屬性的方法;告訴淘汰賽,不再有可觀察的模型。有沒有辦法做到這一點?
EDIT
的基本過程是,用戶上傳的文件;服務器然後用JSON對象響應,則數據綁定HTML被添加到DOM,則JSON對象模型被綁定到使用
mn.AccountCreationModel = new AccountViewModel(jsonData.Account);
ko.applyBindings(mn.AccountCreationModel);
這個HTML一旦用戶已經在模型上進行了一些選擇,所述同一個對象被回傳到服務器,數據綁定HTML從那麼DOM取出,然後我有以下JS
mn.AccountCreationModel = null;
當用戶希望這樣做一次,重複所有這些步驟。
恐怕代碼太'參與'做一個jsFiddle演示。
調用ko。不建議多次應用綁定,特別是在包含相同的dom元素的情況下。可能有另一種方法來實現你想要的。你將需要提供更多的代碼。請儘可能包含jsfiddle。 – madcapnmckay 2012-04-06 21:10:39
爲什麼不公開一個'init'函數來傳遞要應用的數據? – KyorCode 2014-01-29 09:59:13