Ich versuche, ein Raster zu etablieren und es mit mehr Datensätzen über JSON zu aktualisieren. In diesem einfachen Beispiel kann ich die erforderliche Funktionalität erreichen, aber ich kann nur einen JSON-Datensatz aktualisieren/schieben. Ich würde gerne mehrere Datensätze über JSON hinzufügen können? Wie könnte ich das erreichen? Ich nahm an, dass ich vielleicht eine Art for-Schleife erstellen müsste und jedes JSON-Ergebnis auf die Observable schieben müsste, aber ich hatte gehofft, dass Knockout eine bessere Möglichkeit zum Aktualisieren/Parsen über JSON haben könnte?Update Knockout.js Observable von JSON
Heres eine Kopie von dem, was ich bisher erreicht habe: 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>
aktualisiert dies scheint zu funktionieren, aber ich frage mich, ob sie eine effizientere Methode ist?
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]);
};
Denken Sie daran, dass Sie möglicherweise eine Instanzvariable Ihres Modells erstellen müssen, wenn Sie Ihr ObservableArray von irgendwo auf Ihrer Seite außerhalb des eigentlichen Modells aktualisieren möchten, zB: 'var myModelInstance = new Viewmodel();' ' ko.utils.arrayPushAll (myModelInstance.users(), dataFromServer);' ' myModelInstance.users.pushall –
Ist das noch die Art und Weise mit der Version 3.1 zu gehen? – Homer
Ich stelle die gleiche Frage wie Homer. Ist 'pushAll' bereits im Kern von KnockoutJs seit Version 3.1. – Samuel