在knockout中更新数组子值的最佳方法

时间:2013-01-14 15:04:55

标签: knockout.js

我有一个具有IsRecent(bool)项目的淘汰赛observableArray。 IsRecent表示更新的记录是在一分钟之前/之下完成的。当IsRecent为true时,我使用cout击败使用knockout attr的行。当我从数据库加载knockout observableArray时,我通过MVC ViewModel计算出来。像魅力一样。

现在,我不是一直加载整个表,而是只使用ko.util.push / ko.util.replace更新更改的记录/整行。这很有效......

当我推送/替换一条记录时,我想通过整个表格更新一个可疑字段--IsRecent。问题是......怎么样?

我在下面做的事似乎不起作用:

    function setIsRecentHighlight() {
       var now = new Date();
       ko.utils.arrayForEach(taskViewModel.tasks(), function(task) {
           var stamp = new Date(task.LastActivityStampUtc);
           var ms = Math.abs(stamp - now);
           if (ms > 60000 && task.IsRecent) {
              var index = taskViewModel.tasks.indexOf(task);
              task.IsRecent = false;
              taskViewModel.tasks.replace(taskViewModel.tasks()[index], task);
          }
       });
    }

viewModel:

var taskViewModel = {
    tasks: ko.observableArray()
}

任务有:

{"tasks":[
{"$id":"1","Name":"Report1","LastActivityStampUtc":"2013-01-14T12:52:14.420Z","IsRecent":true",
{"$id":"2","Name":"Report2","LastActivityStampUtc":"2013-01-14T12:47:32.700Z","IsRecent":false"}]
}

0 个答案:

没有答案