Busco un objeto json del servidor y llento mi vista. Luego cambio los datos, los vuelvo a enviar al servidor. Luego busco una nueva copia de los datos con la esperanza de que actualice mi vista con cualquier cambio. Sin embargo, eso no sucede. TIAKnockout.js ko.mapping.toJS no refrescando datos en mi vista
$(document).ready(function() {
var customer_id = get_customer_id();
var data = load_model();
contract_model = ko.mapping.fromJS(data,{});
ko.applyBindings(contract_model);
}
function load_model(){
var url = '/ar/contract_json?contract_id='+get_contract_id();
var data = '';
$.ajax({
type:'GET',
url:url,
async:false,
success: function(returningValue){
data = returningValue;
}
});
return data;
}
Esta carga inicial funciona bien. Luego hago algunas cosas y cambio uno de los observables y vuelvo a enviar esos datos al servidor. El servidor recibe la actualización y luego hago una nueva búsqueda de los datos para que la vista se actualice (sé que puedo pasar los datos nuevos en un solo paso, pero esto en código no lo he refabricado todavía).
function refresh_data(contract_model){
var url = '/ar/contract_json?contract_id='+get_contract_id();
$.post(url,function(data){
console.log(data);
ko.mapping.fromJS(contract_model,{},data);
ko.applyBindings(contract_model);
console.log(ko.mapping.toJS(contract_model))
});
}
function refresh_data(contract_model){
var url = '/ar/contract_json?contract_id='+get_contract_id();
$.post(url,function(data){
console.log(data);
ko.mapping.fromJS(contract_model,{},data);
console.log(ko.mapping.toJS(contract_model))
});
}
function push_model(contract_model,refresh){
var url = '/ar/update_contract';
var data = {'contract':ko.mapping.toJSON(contract_model)}
delete data['lines'];
$.post(url,data,function(return_value){
if (refresh){
refresh_data(contract_model);
};
});
}
Todos los mensajes de la consola muestran los nuevos datos que regresan pero mi vista nunca se actualiza.
Los documentos KnockOut para el plugin Mapping son, IMO, incorrectos en la sintaxis para llamar a ko.mapping.fromJS (...). Los documentos muestran lo siguiente: ko.mapping.fromJS (data, viewModel), pero claramente esto debería ser: ko.mapping.fromJS (data, {}, viewModel) –
Pasaron horas en esto. Gracias, fue una gran ayuda. –
También pasé horas en esto. Te debo un paquete de seis – stackoverfloweth