C'è un modo per clonare facilmente Backbone Collection? Mi chiedo il motivo per cui non esiste una build in metodo come per i modelli. Il mio problema è che ho una modella in possesso di una collezione di bambini. Quando clonò la modella. Ho ancora la collezione di childs ma solo con i loro valori predefiniti.Come clonare una collezione backbone
risposta
Qual è il tuo caso di utilizzo che desideri clonare la raccolta?
Non esiste una funzione clone incorporata per una raccolta perché non si desidera clonare i modelli all'interno della raccolta. La clonazione di un modello causerebbe l'esistenza di due istanze separate dello stesso modello e se si aggiorna un modello, l'altro non verrà aggiornato.
Se si desidera creare una nuova raccolta in base a determinati criteri, è possibile utilizzare il metodo di filtro della raccolta.
var freshmenModels = studentsCollection.filter(function(student) {
return student.get('Year') === 'Freshman';
}
var freshmenCollection = new Backbone.Collection(freshmenModels);
di andare avanti e clonare i modelli della collezione, è possibile scrivere il seguente codice
var clonedCollection = new Backbone.Collection();
studentsCollection.each(function(studentModel) {
clonedCollection.add(new Backbone.Model(studentModel.toJSON()));
});
Un'altra opzione, se avete bisogno di quanto segue (che è quello che cercavo quando ho trovato questa domanda;)):
- la copia della collezione dovrebbe essere dello stesso tipo della collezione originale (ad esempio, aver creato il proprio tipo di raccolta che si estende Backbone.Collection)
- La copia della collezione deve essere creato con le stesse opzioni come l'originale
- I modelli della copia della raccolta devono essere creati utilizzando il metodo model.clone()
Codice:
var models = original.map(function (model) { return model.clone(); });
var options = _.clone(original.options);
var copy = new original.constructor(models, options);
Un metodo clone generico su Backbone.Collection sarebbe scomodo perché ci saranno sempre sottigliezze sul fatto che i modelli e i loro oggetti nidificati vengano copiati per riferimento o siano essi stessi clonati. I requisiti varieranno selvaggiamente in base al tuo scenario, quindi è stato lasciato che tu scriva ciò di cui hai bisogno.
più semplice modo:
var cloned = new Backbone.Collection(original.toJSON());
dove original
è la collezione di clonare.
È quindi possibile estendere il numero Collection
di Backbone per aggiungere il supporto clone w o il supporto ereditarietà.
Questa è un'ottima risposta perché eseguirà un clone profondo, il che significa che clonerà anche i modelli. Se preferisci un clone superficiale in cui una nuova raccolta punta alle stesse istanze del modello, utilizza la risposta di Craig Myles in basso. – Dre
non utile quando i modelli ha metodi – OlehZiniak
utilizzare il metodo Backbone Collection clone():
var clonedCollection = myCollection.clone();
clona un collegamento di raccolta, quindi le modifiche in myCollection seguiranno le modifiche in clonedCollection –
- 1. Backbone - Come posso tagliare una collezione?
- 2. Come clonare i modelli in Backbone
- 3. Collezione backbone di modelli polimorfici
- 4. Collezione Backbone con più modelli?
- 5. Creazione di una vista backbone per una collezione
- 6. Backbone I modelli JS e Collezione URL
- 7. Backbone JS parse json attributo al modello di una collezione
- 8. Backbone js collezione di numeri di emissione
- 9. Impossibile recuperare JSON In collezione Backbone
- 10. Principiante backbone: come ottenere il primo modello dalla collezione?
- 11. C# Passare una collezione come una collezione di interfacce
- 12. Backbone - Possibilità di ottenere la collezione da un modello
- 13. Backbone: come convalidare se un modello esiste già in una collezione?
- 14. Puoi clonare una chiusura?
- 15. LINQ, creando collezione unica di una collezione
- 16. Come progettare una ricerca REST con backbone
- 17. Come clonare (e ripristinare) una sottostruttura DOM
- 18. TortoiseGit come clonare una struttura di cartelle
- 19. Binding evento di modifica Backbone attribuire di modello in una collezione
- 20. rilevare quando una collezione spina dorsale è stata scaricata (Backbone 1.0.0)
- 21. Passando una collezione Interface
- 22. osservatore su una collezione
- 23. Come clonare l'immagine?
- 24. NHNon aggiornare una collezione
- 25. Come clonare Joda DateTime?
- 26. Come clonare ImageData?
- 27. Come clonare() StringBuilder
- 28. Come costruire una collezione/Modello da nidificato JSON con Backbone.js
- 29. Backbone JS Paginazione
- 30. Come clonare una matrice con una lunghezza maggiore di 32?
Ma io voglio copiare tutti i singoli modelli della collezione. –
Cosa stai cercando di fare che hai bisogno di copiare/clonare tutti i modelli in una collezione? – Paul
Ho un sacco di prodotti, che possono avere un elenco di prodotti secondari. Quindi quando alcuni li mettono nel cestino devo copiare tutti i sotto prodotti. L'utente può modificare il conteggio del prodotto stesso e per i prodotti secondari. Quindi ho bisogno di una copia dell'originale nel carrello. –