我需要將ViewModel中的主源代碼中的一些數據克隆到對話框中。原因是用戶可以取消對話框,我不希望主人反映這些取消的更改。如何使用敲除映射克隆和重新綁定我的數據?
我在對話框中創建主數據的複製副本,並將數據綁定設置爲拾取「本地編輯的*」特性。如果用戶點擊確定,那麼我會嘗試將數據保存到主數據庫中(如果它已編輯),否則請將數據按其新數據進行推送。
editItem: function(data) {
// clone a temporary copy for the dialog
this.localEdited = ko.mapping.fromJS(ko.toJS(data));
$("#dlgAdd").dialog("open");
},
以上目前的工作,但是,如果我點擊主人的另一個項目,該對話框不顯示更新的值。它好像ko.mapping.fromJS只能工作一次,然後再也不會。它總是拿起第一個值。我如何解決這個問題?我覺得我需要重新綁定價值觀,但是KO的全部意義在於不必這樣做。
我該如何將數據持久化回父項。我想我可能會遇到與上面相同的問題。
順便說一句,我正在使用KnockoutJS 1.2.1。
這個好,謝謝。爲什麼當所有的單個屬性都是包裝的'localEdited'本身必須是可觀察的? – jaffa 2012-02-09 17:34:29
你可以不用localEdited就可以觀察到,但在這種情況下,你需要手動更新editItem函數中localEdited的每個observable屬性。所以你將不得不有這樣的this.localEdited.property1(data.property1()); this.localEdited.property2(data.property2());等等 – 2012-02-09 17:38:45
好吧我現在明白了,當每個任務需要更新UI時,淘汰賽需要一些知道的方法。在這種情況下,可觀察的分配是鉤子。如果我明白,我知道它是一個很好的解釋! – jaffa 2012-02-09 23:23:17