Вот три способа сделать это ... найденные в этой скрипке: http://jsfiddle.net/johnpapa/nfnbD/
1) Используйте функцию ko.utils.arrayPushAll
2) использовать свою логику
3) Напишите свою собственную функцию на observableArray
Подробнее ...
1) Если вы используете функцию ko.utils.arrayPushAll, вам нужно будет также вызвать valueHasMutated, потому что массив эффективно перезаписывается сам собой. Наблюдаемость не срабатывает, если вы скажете, что она изменилась. Вот как вы можете это сделать:
ko.utils.arrayPushAll(this.users(), dataFromServer);
this.users.valueHasMutated();
2) Второй вариант - написать собственную логику цикла, по сути, используя тот же код, что и функция arrayPushAll, как эта.
for (var i = 0, j = dataFromServer.length; i < j; i++)
this.users.push(dataFromServer[i]);
3) Создайте свою собственную функцию в массиве observableArray, например:
ko.observableArray.fn.pushAll = function(valuesToPush) {
var items = this;
for (var i = 0, j = valuesToPush.length; i < j; i++){
items.push(valuesToPush[i]);
}
return items;
};
Хотя этот код выше будет уведомлять каждый раз, когда добавляется элемент. Так что может быть лучше добавить их все, чем уведомить. Это было бы более эффективным. Как это:
ko.observableArray.fn.pushAll = function(valuesToPush) {
var underlyingArray = this();
this.valueWillMutate();
ko.utils.arrayPushAll(underlyingArray, valuesToPush);
this.valueHasMutated();
return this;
};
Тогда назовите это так:
this.users.pushAll(dataFromServer);