0

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"}]
}
4

0 に答える 0