2011-06-07 57 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