При зареждане на страницата конвертирам JSON данни, за да видя модел като този
var jsonField = '#' + '<% = hdnField.ClientID %>';
jsonModel= {
availables: ko.observableArray([])
};
var valueField = $(jsonField)[0].value;
var arrayGroup = $.parseJSON(valueField);
jsonModel.availables = ko.viewmodel.fromModel(arrayGroup);
var block=$('#availabilitiesBlock')[0];
ko.applyBindings(jsonModel,block);
След като страницата се зареди, извиквам ajax сървърна функция, за да актуализирам този модел на изглед.
В tha ajax success call back съм написал като
var updatedModel = {
availables: ko.observableArray([])
};
updatedModel.availables = ko.viewmodel.fromModel(data.d);
Когато се опитам да актуализирам модела на изгледа с този актуализиран модел, целият ми модел става празен
Опитах следните методи
Избута data.d в наблюдавания oldModel.availables. Когато натискам данните, обектите на масива не се преобразуват като наблюдаеми, но елементите се добавят към масива на наличните. Докато в началото (докато страницата се зарежда), обектите бяха преобразувани без проблеми.
Опитах се да актуализирам директно моделите на изглед и в този случай целият модел става празен
ko.viewmodel.updateFromModel(oldModel, updatedModel);
Фрагмент от стар модел
Фрагмент от актуализиран модел
Както казах, когато избутах директно обектите на масива (data.d), наблюдаемите не се създават автоматично, както в първия случай преди ajax.
Защо се случва това, когато логиката е същата? Използвам http://coderenaissance.github.io/knockout.viewmodel/ за картографиране обекти автоматично.
Всякакви насоки ще бъдат полезни