KO / JS:仅通过推送新值并保留现有值来刷新数组

时间:2013-08-30 13:36:47

标签: javascript arrays knockout.js

我有一个getTasks函数,它返回一个任务列表:

$.getJSON("http://todo/actions/", function(data) {
    self.tasks([]); // empty before refresh
    ko.utils.arrayMap(data, function(task) {
        return self.tasks.unshift(new Task.Model(task));
    });
});

我还有一个连接到此功能的刷新按钮,用于刷新列表。但在我运行刷新按钮之前,我必须清空可观察数组,因此不会有任何重复。

这一切都很好,但在我的视图中,foreach绑定包括afterAddbeforeRemove回调,这会使视觉混乱。每当我点击刷新按钮时,整个列表都会在新列表淡入时淡出。

有没有办法刷新该数组只为其添加新值并保留现有值?

1 个答案:

答案 0 :(得分:2)

您可以使用ko.mapping并指定key属性来定义淘汰赛如何检测正在更新的现有项目与正在添加的新项目。

查看ko.mapping.fromJS以及文档如何定义key属性。