2015-10-23 6 views
0

У меня есть значение, определенное как ko.observableArray ([]) и используйте ko.mapping.fromJS для добавления данных из ajax в него. Однако, когда я снова использую ko.mapping.fromJS, новая выборка данных из ajax-вызова заменит self.SampleArray вместо добавления новых данных. Я хотел бы сохранить предыдущие данные. Как это можно сделать?сохранить исходное значение с помощью ko.mapping.fromJS

function ViewModel() { 
 
    var self = this; 
 
    
 
    self.SampleArray = ko.observableArray([]); 
 
    
 
    $.ajax({ 
 
    .. 
 
    .. 
 
    success: function() {  
 
     ko.mapping.fromJS(data, {}, self.sampleArray()); 
 
    } 
 
    }) 
 
}

ответ

2

Попробуйте толкая его в observableArray, а заменить его

ViewModel:

function ViewModel() { 
    var self = this; 
    self.sampleArray = ko.observableArray([{ 
     'Hours': 0.5 
    }]) 
    setTimeout(function() { 
     alert('Mock of ajax call') 
     var newData = ko.mapping.fromJS(data1)(); 
     self.sampleArray.push.apply(self.sampleArray,newData) 
    }, 2000); 
} 
ko.applyBindings(new ViewModel()) 

Преимущество push.apply по сравнению с традиционными операторов цикла:

Если массив/коллекция имеет несколько элементов, и если вы добавляете (Array.push (пункт) один за другим, то абоненты будут уведомлены по каждый нажимной/добавить операцию. Тогда UI будет иметь этот номер обновления. Это повредит работе страницы пользовательского интерфейса.

Но если вы используете array.push.appy, то вы можете добавить несколько элементов, но абоненты будут уведомлены только один раз.

В этом разница и преимущество/использование этой функции array.push.apply.

образец работает скрипку here

образец работает скрипку с utils.forEach here

+0

что является преимуществом использования ko.utils.arrayForEach более $ .each? – desmondlee

+0

@desmondlee 'arrayForEach' - это утилита для нокаутов, где' .each' - это версия jquery. '.each' требует, чтобы библиотека jquery функционировала как функция non ko. оба делают то же самое. –

+0

@desmondlee оптимизированный код с помощью 'push.apply' проверить обновление cheers –

Смежные вопросы