Sto tentando di stabilire una griglia e aggiornarla con altri record tramite JSON. In questo semplice esempio sono in grado di ottenere la funzionalità richiesta, ma posso solo aggiornare/spingere un record JSON. Mi piacerebbe poter aggiungere più record tramite JSON? Come potrei ottenere questo? Ho pensato che avrei dovuto creare una sorta di ciclo for e spingere ogni risultato JSON all'osservabile, ma speravo che knockout potesse avere un modo migliore di aggiornare/analizzare tramite JSON?Aggiornamento Knockout.js osservabile da JSON
Heres una copia di quello che ho ottenuto finora: http://jsfiddle.net/sparkhill/crSbt/
function Users(user_id, password) {
this.user_id = ko.observable();
this.password = ko.observable();
}
var viewModel = {
users: ko.observableArray([]),
addUser: function() {
this.users.push({
user_id: "",
password: ""
});
},
addJSON: function() {
//Works Fine
var JSONdataFromServer
='{"user_id":"frances","password":"password"}';
//More than one result - wont map - Would Ideally like to map lots of records at one time
//var JSONdataFromServer ='{"user_id":"frances","password":"password"}, {"user_id":"frances","password":"password"}';
var dataFromServer = ko.utils.parseJson(JSONdataFromServer);
this.users.push(dataFromServer);
//Tried
//this.users.push(JSON.parse(JSONdataFromServer));
}
};
viewModel.users();
ko.applyBindings(viewModel);
</script>
Aggiornamento questo sembra funzionare, ma mi chiedo se il loro è un metodo più efficiente?
addJSON: function() {
//Works Fine
var JSONdataFromServer
='[{"user_id":"frances","password":"password"},{"user_id":"timmy","password":"password"}]';
var results = JSON.parse(JSONdataFromServer);
var i = results.length;
for(var i = 0; i < results.length; i++){
this.users.push(results[i]);
};
Ricorda che potresti aver bisogno di creare una variabile di istanza del tuo modello se vuoi aggiornare il tuo observableArray da qualche parte nella tua pagina, al di fuori del modello stesso, ad esempio: 'var myModelInstance = new ViewModel();' ' ko.utils.arrayPushAll (myModelInstance.users(), dataFromServer);' ' myModelInstance.users.pushall –
è ancora la strada da percorrere con la versione 3.1? – Homer
Chiedo la stessa domanda di Omero. 'PushAll' è già nel nucleo di KnockoutJs dalla versione 3.1. – Samuel