update multiple knockout data knockout.js

knockout.js - multiple - ¿Cómo agregar una matriz de objetos en una matriz observable en knockout?



ko js value update (1)

Obtengo una gran variedad de objetos a través de ajax y si la matriz tiene datos, se pasará a ImportObservableListItems en mi viewmodel:

success: function (data) { debugger if (data.length > 0) { ReadingList.ImportObservableListItems(data); }

en el modelo de vista, me gustaría agregar cada objeto a una matriz observable, pero necesito que las propiedades de cada objeto sean observables. Sin embargo, si la matriz contiene una gran cantidad de objetos, el navegador se bloquea. ¿Hay alguna manera de prevenirlo?

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); }); };


Puede reducir la rotación al presionar todos los elementos a la vez (push acepta varios elementos):

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);

Esto hará que solo salga una notificación cuando se hayan agregado todos los artículos, en lugar de una vez por artículo.