Prendo un oggetto JSON dal server e compilo la mia vista. Allora cambio i dati, lo spingo indietro al server. Prendo quindi una nuova copia dei dati sperando che aggiorni la mia vista con qualsiasi modifica. Tuttavia ciò non accade. TIAKnockout.js ko.mapping.toJS non aggiorna i dati nella mia 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;
}
Questo caricamento iniziale funziona correttamente. Quindi faccio delle cose e cambio uno degli osservabili e li rimando al server. Il server ottiene l'aggiornamento e quindi faccio un nuovo recupero dei dati in modo che la vista si aggiorni (so che posso passare i nuovi dati in un solo passaggio ma questo in codice non ho ancora refactored).
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);
};
});
}
I messaggi della console tutti mostrano i nuovi dati di ritorno, ma la mia vista non aggiorna mai.
I documenti KnockOut per il plug-in Mapping sono, IMO, errati nella sintassi per la chiamata di ko.mapping.fromJS (...). I documenti mostrano quanto segue: ko.mapping.fromJS (data, viewModel), ma chiaramente questo dovrebbe essere: ko.mapping.fromJS (data, {}, viewModel) –
Ore trascorse su questo. Grazie, questo è stato di grande aiuto. –
Ho anche passato ore su questo. Ti devo un pacchetto di sei – stackoverfloweth