2014-11-04 107 views
0

我的問題的foreach大選擇地變慢knockoutjs數據綁定

我有一個加載同一選擇有數以百計的檢索每個數據項的選項表。我檢索數據的選擇和之前的數據綁定其存儲在一個JavaScript變量。問題是,因爲有這麼多的選擇,選項花費10秒來填充數據集有200多個項目。

我所做的決定,這是我已經刪除了選擇非常快的數據綁定的運行,所以我敢肯定,這是我的問題,發現問題

我的問題

我還能做些什麼來加速這一進程?

我實現

<table id="reportList"> 
    <tbody data-bind='foreach: reportList'> 
     <tr> 
      <td> 
       <select class="itemSelect" data-bind="options: $root.selectItemIDOptions, 
                value:ItemID, optionsValue: 'ItemID', 
                optionsText: 'SupplierItemID', 
                optionsCaption: 'Select Item'" /> 

      </td> 
      <td data-bind="text: Description"></td> 
     </tr> 

我的視圖模型

function ReportViewModel(reportData) { 

    //GlobalItemList already has all of the select options at this point ready for databinding 
    self.selectItemIDOptions = GlobalItemList; 
    self.reportList = ko.observableArray(); 
    var Shrinkage = reportData.ShrinkageList; 
    var rowArr = self.reportList(); 
    for (var i = 0; i < Shrinkage.length; i++) { 
    rowArr.push(new ReportRow(Shrinkage[i].ItemID, Shrinkage[i].Description); 
    } 

    self.reportList.valueHasMutated(); 
} 

Row類

function ReportRow(ItemID, Description) { 

    var self = this; 
    self.ItemID = ko.observable(ItemID); 
    self.Description = ko.observable(Description); 
} 
+0

這裏類似的問題:http://stackoverflow.com/questions/9709374/knockout-js-incredibly-slow-under-semi-large-datasets – SkelDave 2014-11-04 21:48:05

回答

1

我的建議是不要試圖在關於大型修復或調試淘汰賽數據集,而是重構數據你正在發送。

如果你把每〜記錄(而不是100),10場的第一個數據呼叫,然後提供一個「獲取詳細信息」鏈接,用戶通過行的基礎來獲得一個排的其他90個領域。

這將很快加載原始名單,每個後續調用更多的細節也將是快速的。