Supongamos que hay 2 colecciones, que representan respectivamente /api/page/1
y /api/page/2
; ¿hay alguna forma (por ejemplo, underscore) para fusionar estas 2 colecciones en una nueva colección única?Backbone - Fusionar 2 colecciones juntas?
Respuesta
Opción 1
Si no haber recogido el la colección sin embargo, se puede recuperar la primera, a continuación, buscar el segundo con el {add: true} bandera y el segundo se se fusionarán en la primera:
collection.fetch({data : {page : 2});
=> [{id: 1, article : "..."}, {id: 2, article : "..."}];
collection.fetch({data : {page : 2}, add : true });
=> [{id: 1, article : "..."}, {id: 2, article : "..."}, {id: 3, article : "..."}];
Opción 2
Si you'v e ya se fue a buscar las colecciones y hacer que se almacena en dos variables, puede simplemente añadir todos los contenidos de la segunda colección en la primera:
collection1.add(collection2.toJSON());
Esta opción adolece del hecho de que la primera colección se disparará el "add "evento cuando se agrega la segunda colección. Si esto no tiene efectos secundarios como la interfaz de usuario no deseado que vuelve a renderizar debido a este evento, puede suprimirla añadiendo el {silenciosa: true} bandera
collection1.add(collection2.toJSON(), {silent : true});
Opción 3
Si sólo necesita el formato JSON de estas colecciones, es decir,con fines plantilla de representación HTML, sólo puede reducir todo a los literales de JS (matrices, objetos):
collection1.toJSON().concat(collection2.toJSON());
=> [{id: 1, article : "..."}, {id: 2, article : "..."}, ...];
Opción 4 Opción = 2 + 3
Si ya ha arreó dos recopilatorios, puede reducir a los literales JS y añadir todo a una colección fresca Backbone
var rawCollection = collection1.toJSON().concat(collection2.toJSON());
var newCollection = new Backbone.Collection(rawCollection);
Me parece que al hacer esto, pierdes la semántica vinculada a /api/page/{1, 2}/
.
También me parece que ni la columna vertebral, ni subrayado, le proporciona una función/método de hacer exactamente lo que estás tratando de hacer.
por lo que sus opciones:
- crear una nueva colección, agregue cada elemento de sus colecciones anteriores;
- añadir primeros elementos de la colección a la segunda
Pero es probable que ya lo sabían.
Sí. Creo que la solución aquí es tener 1 colección y 'obtener ({data: {page: 1}, add: true})'. Incremente el valor de la página con cada 'fetch()' y agregue el último lote/página de modelos en la colección. – jmk2142
Su solución parece bastante bonita, sin embargo, creo que ya ha recogido las colecciones, y probablemente quiera evitar volver a buscar los datos. Pero si se nota el caso, entonces tu camino es A Good Way. – ksol
collection.add(models, [options])
Collection es gama de modelos
collection.models
vuelve gama de modelos
Añadir un modelo (o una serie de modelos) a la colección.
A = Backbone.Collection;
collection1 = new A([
{key, 'value'}, //model1
{key : value1} //model2 in collection1
]);
B = Backbone.Collection;
collection2 = new B([
{key1, 'value'}, //model1
{key1 : value1} //model2 in collection2
]);
collection1.add(collection2.models); //now, collection1 has four models..
Collection.models ofrece acceso directo a la gama de moels y Collection.add tendrá una gran variedad de modelos como argumento.
uso
collection.models
insted de
collection.toJSON()
probar esto, colección es variedad de modelos
collection1.add(collection2.models);
si utilizamos
collection1.add(collection2.toJSON());
luego referencia chage
+1 Esa es la única respuesta real, realmente debería ser la aceptada. Ver documentación: http://backbonejs.org/#Collection-add. También puede decidir si acepta o no duplicados pasando: {merge: true} –
- 1. fusionar 2 ramas de svn juntas
- 2. Java fusionar 2 colecciones en O (1)
- 3. C# fusionar elementos distintos de 2 colecciones
- 4. Trabajando con grandes colecciones Backbone
- 5. Fusionando 2 ramas juntas en GIT
- 6. Backbone - Colecciones anidadas en los modelos
- 7. Fusionar 2 imágenes con node.js?
- 8. Listas ordenadas jQuery vinculadas y colecciones de Backbone
- 9. git-svn fusionar 2 ramas svn
- 10. Cómo fusionar automáticamente 2 cabezales con mercurial
- 11. MongoDB: ¿Cómo combinar dos colecciones/bases de datos juntas en una sola?
- 12. F # Conceptos básicos: Plegar 2 listas juntas en una cadena
- 13. SQL: Agrupar cadenas juntas
- 14. PHP: Agregar matrices juntas
- 15. Cosiendo fotos juntas
- 16. Encadenando plantillas variadas juntas
- 17. Backbone Design
- 18. Backbone View Herencia
- 19. ¿Cómo puedo fusionar 2 imágenes en Windows Phone?
- 20. Cómo fusionar 2 secuencias XML en Java mediante XSLT
- 21. fusionar o suma 2 arrays de "claves" en rubí
- 22. cómo fusionar 2 imágenes sin utilizar el conjunto alfa?
- 23. eventos Backbone
- 24. Coincidir elementos entre 2 colecciones con Linq en C#
- 25. ¿Cómo tener 2 colecciones del mismo tipo en JPA?
- 26. Concat dos cadenas juntas
- 27. ¿Agregar dos variables juntas?
- 28. ¿Cómo puedo implementar correctamente el análisis sintáctico en un modelo Backbone para incluir colecciones?
- 29. Comenzar con Backbone y CoffeeScript
- 30. Backbone toJSON
Gracias por la explicación detallada =) – Kay
-1. Si llama a JSON() pierde la referencia a los modelos. Si crea un modelo, insértelo en una colección, combine la colección con otra, cambie el modelo, el modelo de la última colección no se actualiza. Esto se convertirá en una pesadilla para depurar. Estaría bien si quisiera copiar los modelos y mantenerlos separados, pero no es la norma y debe señalarse. –
Si ya tiene las dos colecciones, probablemente debería usar cualquiera de las siguientes respuestas que usan: 'collection1.add (collection2.models);' –