2011-06-07 59 views
8

處理可在KnockoutJS中提交/拋出的可觀察數組的最佳方式是什麼?knockoutJS支持受保護的可觀察數組嗎?

我之前用ProtectedObservable的想法實現了這個想法,但是這只是一個數據記錄,而不是一個數組。

只是想知道如何最好地前進。我的項目需要一個包含所有電子郵件地址聯繫人的對話框以及所選的列表。當它們從左側的列表中添加時,它們將被刪除並被添加到右側的列表中。

當按下「確定」按鈕時,它們被添加到收件人:欄中,但當按下「取消」按鈕時,列表將被恢復到之前的狀態(以前可能已被填充)。

回答

11

如何像這樣:http://jsfiddle.net/rniemeyer/PAzVk/

這使用支持 「快照」 的observableArray。您可以保存底層數組的副本,並在需要時進行恢復。

ko.snapShotObservableArray = function(initialData) { 
    var _snapShot = initialData; 
    var result = ko.observableArray(initialData || []); 

    result.takeSnapShot = function() { 
     _snapShot = this().slice(); //take a copy of the underlying array 
    }; 

    result.restoreSnapShot = function() { 
     this(_snapShot.slice()); 
    } 

    return result; 
} 

在示例,你就會對「」行,你可用用戶的陣列,用戶選擇的陣列,以及用戶的陣列上使用。然後,取消按鈕將每個陣列恢復到您拍攝上次快照的位置。

+0

次要更新restoreSnapshot,因爲它需要是副本。 – 2011-06-07 16:41:21

+0

一如既往,一個奇妙的解決方案。謝謝瑞恩。 – 2012-11-05 22:14:42