我有一个具有 IsRecent (bool) 项的淘汰 observableArray。IsRecent 表示更新的记录是否在一分钟前完成。当 IsRecent 为真时,我使用带有 css 的淘汰赛的 attr 突出显示该行。当我从数据库加载淘汰赛 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);
}
});
}
视图模型:
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"}]
}