knockoutJS是否支持受保护的可观察数组?

时间:2011-06-07 09:27:08

标签: knockout.js

处理可以在KnockoutJS中提交/抛弃的可观察数组的最佳方法是什么?

我之前已经使用ProtectedObservable想法实现了这一点,但这是在一个数据记录上,而不是在数组上。

只是想知道如何最好地前进。我的项目需要所有电子邮件地址联系人的对话框和所选的列表。当它们从左侧的列表中添加时,它们将被删除并添加到右侧的列表中。

当按下“确定”按钮时,它们会被添加到“收件人:”字段中,但是当按下“取消”时,列表将恢复到之前的状态(之前可能已经填充过)。

1 个答案:

答案 0 :(得分:11)

这样的事情:http://jsfiddle.net/rniemeyer/PAzVk/

这使用支持“snapShots”的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;
}

在示例中,您将在“To”行上的可用用户数组,所选用户数组和用户数组中使用此数组。然后,取消按钮将每个阵列恢复到您拍摄最后一个快照的位置。