2013-04-19 19 views
8

私は、Ajaxによるオブジェクトの大きな配列を取得していますし、アレイは、データを持っている場合、それは私のviewmodelにImportObservableListItemsに渡されます:私が観測配列に各オブジェクトを追加したいのviewmodelでノックアウトの観測可能な配列にオブジェクトの配列を追加するには?

 success: function (data) { 
      debugger 
      if (data.length > 0) { 

      ReadingList.ImportObservableListItems(data); 

      } 

私は各オブジェクトのプロパティを観察可能にする必要があります。配列に多数のオブジェクトが含まれていると、ブラウザがクラッシュします。私はそれを防ぐことができる方法はありますか?

self.ImportObservableListItems = function (data) { 
      $.each(data, function(index, item) { 
       var newListItem = { 
        MediaID: ko.observable(item.MediaID), 
        MediaName: ko.observable(item.MediaName), 
        MediaTypeID: ko.observable(item.MediaTypeID), 
        MediaTypeName: ko.observable(item.MediaTypeName), 
        Group1: ko.observable(item.Group1), 
        Group2: ko.observable(item.Group2), 
        Group3: ko.observable(item.Group3), 
        Group4: ko.observable(item.Group4), 
        Group5: ko.observable(item.Group5) 
       }; 
       ReadingList.ReadingListItems.push(newListItem); 
      }); 
     }; 
+2

"たくさんのオブジェクト"はいくつありますか? – Brandon

答えて

23

あなたは(プッシュ複数の項目を受け付けます)一度にすべてのアイテムを押して解約を減らすことができます

var items = $.map(data, function (item) { 
    return { 
     MediaID: ko.observable(item.MediaID), 
     MediaName: ko.observable(item.MediaName), 
     MediaTypeID: ko.observable(item.MediaTypeID), 
     MediaTypeName: ko.observable(item.MediaTypeName), 
     Group1: ko.observable(item.Group1), 
     Group2: ko.observable(item.Group2), 
     Group3: ko.observable(item.Group3), 
     Group4: ko.observable(item.Group4), 
     Group5: ko.observable(item.Group5) 
    }; 
}); 

ReadingList.ReadingListItems.push.apply(ReadingList.ReadingListItems, items); 

これは、すべての項目が追加されている場合にのみ単一の通知が出て行くことになります、1回に1回ではなく、

+0

次のようなものを使用すると、同じパフォーマンス上の利点が得られるかどうか尋ねることができます:self.customObsArray($ map(data、function(item){ return new CustomModel(item); })); jQueryの依存関係を削除するためにko.utils.arrayMapを使用することでより効果的です。 – Simone

+0

@Simoneあなたの提案は、既存のアイテムの配列を新しいアイテムの配列で置き換えることになります。 (彼らは_add_既存の配列にアイテムを追加したい)。 – Brandon

関連する問題