IsRecent(ブール)アイテムを持つノックアウトobservableArrayがあります。IsRecentは、更新されたレコードが1分以上前に行われたか1分以内に行われたかを示します。IsRecentがtrueの場合、cssでノックアウトの属性を使用して行を強調表示します。データベースからノックアウトobservableArrayをロードするとき、MVCViewModelを介してそれを計算します。チャームのように機能します。
これで、テーブル全体を常にロードするのではなく、ko.util.push/ko.util.replaceを使用して変更されたレコード/行全体のみを更新します。それはうまくいきます...
1つのレコードをプッシュ/置換するときは、テーブル全体を調べて、1つの簡単なフィールドである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"}]
}