Como @mu_is_too_short comentado, Backbone-relacional podría ser algo que usted está interesado en estudiar. Con Backbone-relational sus modelos y colecciones de submodelos se crean automáticamente y los eventos se pueden administrar a través de la relación padre-hijo.
Le daré un código de muestra para que pueda probarlo. Parte de su código de ejemplo podría verse más o menos así.
usuario tiene muchos eventos:
User = Backbone.RelationalModel.extend({
relations: [
type: Backbone.HasMany, // Type of relationship
key: 'events', // How we reference the sub-models in collection
relatedModel: 'Event', // The sub-model type
collectionType: 'EventCollection', // The sub-model collection
reverseRelation: {
key: 'belongsToUser' // Key we use to refer to the parent
}
],
// Other Backbone.Model properties and functions
});
Cuando se crea un modelo relacional-Backbone, crea automáticamente un conjunto de submodelos para que el nombre de la 'llave' que se designe. De modo que cada usuario que tenga tendrá su propia colección de eventos relacionados ordenados.
Básicamente, cuando crea o busca al usuario, le da referencias a los modelos relacionados que necesita. Entonces, por ejemplo, su ID de usuario = 1 podría necesitar el Evento 5, 7 y 11. (Solo estoy usando ID). Siempre que estas referencias se definan en forma de matriz, puede cargarlas de forma perezosa utilizando los métodos Relational fetchRelated.
myUser = new User();
myUser.set({
name: 'RayMysterio',
age: '26',
events: [5, 7, 11] // Or this might just come with the User object from your server
});
myUser.fetchRelated('events');
// This will go fetch the related events for this user model from the URL you designate.
myUser.get('events');
// The collection of events are treated like an attribute of the User model.
myUser.get('events').find(function(eventModel){
return // some find condition - or whatever you want to do on that collection
});
Es posible que desee vincular ciertos oyentes a los submodelos.
myUser.bind('add:events', function(model, collection) {
// Whatever code you want to happen when new models are added to the user events coll
});
Etc. Etc.
Es una buena manera de producir uno a uno, uno a muchos, y las relaciones inversas. Esto es bastante clave. Cuando define una relación entre modelos y crea un modelo.
E.g. usted crea una nueva instancia de modelo de Usuario.
Backbone-relational crea automáticamente el enlace inverso (el modelo de evento tiene un atributo definido por la clave de relación inversa 'belongsToUser' (o lo que sea). Esto hace que sea muy útil recorrer arriba y abajo el modelo/sub- jerarquía del modelo.
sobre la base de sus necesidades relacionales esto parece un buen ajuste.
Si desea muchos a muchos, hay un camino de ida y acerca de hacerlo (usando modelos intermedios) pero he encontrado esto es poco convincente y lo evito. Paul-Uithol ha estado actualizando Backbone-Relational por un tiempo y las nuevas características se siguen sumando. La curva de aprendizaje fue un poco difícil para mí al principio, pero una vez que empiezas acostumbrarse es muy útil.
NOTA: Para enfatizar, Mosselman recomendó Require.js y también estoy totalmente de acuerdo con esto. Ha hecho que mi código sea mucho más manejable. Puede ajustar (ajustar) el código relacional Backbone para que sea compatible con AMD y funciona sin problemas con Require.
ACTUALIZACIÓN: columna vertebral-relacional ahora es compatible con require.js partir de la versión 0.8.8 el 1 de abril 2014 - gracias Kenneth
¿Es posible relacionar eventos al usuario a través de un modelo de eventos? 'myUser.set ('events', [myEvent1, myEvent2, myEvent3]);' algo así? ¿O tiene que hacer referencia a la relación a través del id del modelo relacionado? –
@orangewarp backbone-relational ahora es compatible con require.js a partir del lanzamiento 0.8.8 el 1 de abril de 2014. Ver http://backbonerelational.org/#change-log – Kenneth