Sto cercando di risolvere un piccolo problema con la mappatura ko. Lo scenario è che il mio ViewModel è fondamentalmente una raccolta di oggetti. Ciascuno degli oggetti è stato creato da una chiamata JSON, in questo modo:knockout creare un oggetto vuoto da auto-mapped osservabile
var ViewModel = ko.observableArray();
$.getJSON(url, function(data) {
ViewModel.push(ko.mapping.fromJSON(data));
});
Questo funziona perfettamente e posso fare ogni sorta di magia nel mio HTML. La domanda è se per esempio voglio aggiungere qualcosa alla mia collezione, diciamo per supportare lo scenario "Aggiungi e modifica" lato client. Mi piacerebbe fare qualcosa di simile:
<input type="button" value="add new" data-bind="click: AddNew" />
E vorrei la funzione AddNew nel ViewModel essere qualcosa di simile:
function AddNew() {
this.push(// WHAT HERE?);
}
Fondamentalmente ho bisogno di spingere un oggetto che è identico all'altro già esistente, ma ovviamente con tutte le proprietà cancellate ...
Stavo pensando a un modo di "clonare" un oggetto dall'elenco e di impostare tutti gli osservabili a vuoto ma non saprei da dove iniziare I ' m paura:/
"Un avvertimento con il plug-in di mappatura è che per l'aggiornamento degli oggetti si aspetta che questi oggetti siano stati originariamente mappati dal plugin. Ecco un rapido esempio di come potrebbe essere fatto." - Se lo avessi saputo prima, mi avrebbe risparmiato un sacco di tempo! – ec2011