A veces necesitas una Backbone.Collection tenga modelos de diferentes tipos normalmente derivados de uno base.
No hay problema si añades los modelos a mano:
var c = new Backbone.Collection(); c.add(new MyModel()); c.add(new MyOtherModel());
Sin embargo cuando los datos vienen serializados desde el API que estés usando Backbone internalmente genera los modelos, así que todos los modelos son iguales.
Hay varias formas de hacer que los modelos que se generen sean los correctos, una de ellas que es más o menos simple:
var C = Backbone.Collection.extend({ model: function(attrs) { var t = { 'type1': MyModel, 'type2': MyOtherModel } return new t[attrs.type](attrs);
} });
var c = new C(); c.reset([ { type: 'type1', ...}, { type: 'type2', ...}, ])
Obviamente hay que hacer un override del método toJSON de los modelos para incluir el type.