2011-10-03 1 views

risposta

14

Come per la maggior parte di Backbone.js, non si otterrà una risposta "giusta" a questo, ma posso condividere come lo faccio. Con entrambi i modelli e punti di vista, io in genere seguire queste indicazioni:

  • Visualizzazioni e modelli dovrebbero essere istanziati dal componente che è "responsabile" per loro. Per i modelli o le viste con relazioni padre/figlio chiare, il modello principale dovrebbe creare un'istanza, solitamente nel metodo initialize().

  • I genitori devono legarsi agli eventi secondari al momento dell'istanziazione.

  • I genitori devono essere "consapevoli" dei bambini e possono chiamare i metodi figli, se necessario. In genere, utilizzerei questo metodo per attivare un evento figlio, in quanto è più esplicito. Cerco di tenere i bambini indipendenti dai loro genitori, comunicando verso l'alto attraverso gli eventi. Quindi sì, i modelli profondamente annidati avrebbero comunicato attraverso le catene di eventi.

  • Talvolta sono i bambini .set() come attributi Backbone, ma in genere si utilizzano solo attributi JavaScript semplici (ad esempio this.child). Dipende dal contesto. L'uso degli attributi Backbone fornisce gli eventi change, quindi se devi monitorare se un bambino cambia, usali. Gli attributi Backbone ti danno anche la possibilità di impostare al momento dell'istanziazione, ad es. var myModel = new Model({ other: otherModel }) - ma poiché i genitori di solito creano un'istanza per i propri figli, in questo caso non si applica realmente e di solito utilizzo tale modello per relazioni modello-modello non gerarchiche. Nella maggior parte dei casi, ho impostato i bambini come semplici attributi Javascript.

+0

bella risposta. Apprezzo che ci sia più di un approccio canonico migliore –

3

Mi piace molto la risposta di @nrabinowitz. ha coperto tutti i dettagli giusti.

voleva solo buttare fuori l'idea di usare qualcosa come Backbone.Relational che gestisce tutta questa roba per voi: https://github.com/PaulUithol/Backbone-relational

+0

Alla fine ho avuto problemi simili a questa domanda backbone-rel, qualche idea? Penso che potrei aspettarmi un comportamento diverso dai modelli creati automaticamente? http://stackoverflow.com/questions/7685791/backbone-relational-events-not-firing – boom