Come @mu_is_too_short commentato, Backbone-relazionale potrebbe essere qualcosa che si sono interessati a guardare in. Con Backbone-relational i modelli e le raccolte di submodel vengono creati automaticamente e gli eventi possono essere gestiti attraverso la relazione genitore-figlio.
Ti darò solo un codice di esempio in modo da poterlo assaggiare. Parte del codice di esempio potrebbe essere simile a questa.
utente ha molti eventi:
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
});
Quando si crea un modello di Backbone-relazionale, crea automaticamente una raccolta di sottomodelli per voi dal nome della 'chiave' che si designa. Quindi ogni utente che avrà avrà la propria raccolta di eventi correlati riordinati.
Fondamentalmente, quando si crea o si recupera l'utente, gli si forniscono riferimenti ai relativi modelli di cui ha bisogno. Ad esempio, il tuo ID utente = 1 potrebbe avere bisogno degli eventi 5, 7 e 11. (Sto solo usando gli ID). Finché questi riferimenti sono definiti in forma di matrice, è possibile caricarli in modo pigramente utilizzando i metodi fetchRelated di Relational.
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
});
Potrebbe essere necessario associare determinati listener ai sottomodelli.
myUser.bind('add:events', function(model, collection) {
// Whatever code you want to happen when new models are added to the user events coll
});
Ecc ecc
E 'un bel modo di produrre uno a uno, uno a molti, e le relazioni inverse. Questa è una chiave carina. Quando definisci una relazione tra i modelli e crei un modello.
E.g. si crea una nuova istanza del modello utente.
Backbone-relazionale crea automaticamente il collegamento inverso (il modello di evento ha un attributo definito dalla chiave della relazione inversa 'belongsToUser' (o qualsiasi altra cosa lo si chiami). Questo rende piuttosto comodo attraversare su e giù il modello/sotto- modello gerarchico.
in base alle vostre esigenze relazionali questa sembra una buona misura.
Se volete molti a molti, c'è un modo rotonda di farlo (usando modelli intermedi) ma ho trovato questo è un po 'traballante e lo evito Paul-Uithol ha aggiornato Backbone-Relational per qualche tempo e nuove funzionalità continuano ad essere aggiunte. La curva di apprendimento è stata un po' difficile per me all'inizio, ma una volta che inizi abituarsi ad esso è molto utile.
NOTA: solo per sottolineare, Mosselman ha raccomandato che Require.js ed io siamo anche d'accordo con questo. Ha reso il mio codice molto più gestibile. Puoi armeggiare (avvolgere) il codice relazionale Backbone per renderlo compatibile con AMD e funziona perfettamente con Require.
UPDATE: spina dorsale-relazionale ora supporta require.js dalla versione 0.8.8 il 1 Aprile 2014 - grazie Kenneth
E 'possibile mettere in relazione gli eventi per l'utente tramite un modello di eventi? 'myUser.set ('events', [myEvent1, myEvent2, myEvent3]);' qualcosa del genere? O devi fare riferimento alla relazione tramite l'id del modello correlato? –
@orangewarp backbone-relational ora supporta require.js a partire dalla versione 0.8.8 del 1 ° aprile 2014. Vedi http://backbonerelational.org/#change-log – Kenneth