重複の可能性:
Knockout.js は準大規模なデータセットでは非常に遅い
モデルに次のイベントがありますが、レコードが数個しかない場合は正常に動作しますが、数十個のレコードを取得すると、スクリプトの実行が遅すぎると IE が訴えます。
self.getTrades = function () {
$.ajax({
type: "GET",
cache: false,
url: "/_vti_bin/DBOrderService/DBOrderService.svc/GetTradesByDateSource?format=json&traddate=" + self.selectedDate() + "&source=" + self.selectedSource(),
success: function (data, textStatus, jqXHR) {
if (data.requeststatus.code === 1) {
var statusId = SP.UI.Status.addStatus(data.requeststatus.message);
SP.UI.Status.setStatusPriColor(statusId, 'red');
return;
}
debugger;
ko.mapping.fromJS({ trades: data.trades }, mappings, self); //too slow, events are firing as items are added
self.selectedTrade(null);
},
error: ajaxError
});
};
マッピングが追加された行ごとに変更通知を発行しているためだと思うので、新しい行を「一括」でモデルにコピーしたいと思います。
私は試した
var temptrades = ko.mapping.fromJS(data.trades, mappings);
self.trades=temptrades();
と
self.trades(temtrades);
と
self.trades(temptrades();
しかし、それらはすべて私のモデルを壊すだけです。ko.mapping によって作成された監視可能な配列を一度にモデルにコピーする正しい方法は何ですか。最後までイベントの発火を防ぐ ko.mapping のオプションはありますか?