У меня есть большой наблюдаемый массив:
self.data = ko.mapping.fromJS(bigdata)
Мне нужно обновить одно поле каждого элемента в данных;
Самое простое решение
self.showAll = function() {
for(var i = 0; i<self.data().length; i++) {
self.data()[i].visible(true);
}
}
Но он очень медленный, потому что вызывает обработчики после каждого обновления. Рекомендуется использовать такой код:
var items = ko.observableArray([]);
var underlyingArray = items();
for (var i = 0, j = underlyingArray.length; i < j; i++) {
// work with underlyingArray
}
self.items.valueHasMutated();
Но это не работает с объектами ko.mapping.
Теперь я использую код вроде
var data = ko.mapping.toJS(self.data);
for(var i = 0; i<data.length; i++) {
//
}
ko.mapping.fromJS(data, {}, self.data);
Мне это не нравится. Может есть что-то лучше? Есть ли способ приостановить работу всех обработчиков ko?