Ho una configurazione di visualizzazione nidificata che può diventare un po 'profonda nella mia applicazione. Ci sono molti modi in cui potrei pensare di inizializzare, rendere e aggiungere le sotto-viste, ma mi chiedo quale sia la pratica comune.
Ecco un paio a cui ho pensato:
initialize : function () {
this.subView1 = new Subview({options});
this.subView2 = new Subview({options});
},
render : function () {
this.$el.html(this.template());
this.subView1.setElement('.some-el').render();
this.subView2.setElement('.some-el').render();
}
Pro: Non devi preoccuparti di mantenere il giusto ordine DOM con l'aggiunta. Le viste vengono inizializzate all'inizio, quindi non c'è molto da fare tutto in una volta nella funzione di rendering.
Contro: sei costretto a ri-delegareEvents (), che potrebbe essere costoso? La funzione di rendering della vista padre è ingombra di tutto il rendering della sottoview che deve avvenire? Non hai la possibilità di impostare gli tagNameelementi, quindi il modello deve mantenere i tagNames corretti.
Un altro modo:
initialize : function () {
},
render : function () {
this.$el.empty();
this.subView1 = new Subview({options});
this.subView2 = new Subview({options});
this.$el.append(this.subView1.render().el, this.subView2.render().el);
}
Pro: non è necessario delegare nuovamente gli eventi. Non è necessario un modello che contenga solo segnaposto vuoti e i tagName tornino ad essere definiti dalla vista.
Contro: ora devi assicurarti di aggiungere le cose nel giusto ordine. Il rendering della vista padre è ancora ingombro dal rendering della vista secondaria.
Con un onRenderevento:
initialize : function () {
this.on('render', this.onRender);
this.subView1 = new Subview({options});
this.subView2 = new Subview({options});
},
render : function () {
this.$el.html(this.template);
//other stuff
return this.trigger('render');
},
onRender : function () {
this.subView1.setElement('.some-el').render();
this.subView2.setElement('.some-el').render();
}
Pro: la logica della vista secondaria ora è separata dal render()metodo della vista .
Con un onRenderevento:
initialize : function () {
this.on('render', this.onRender);
},
render : function () {
this.$el.html(this.template);
//other stuff
return this.trigger('render');
},
onRender : function () {
this.subView1 = new Subview();
this.subView2 = new Subview();
this.subView1.setElement('.some-el').render();
this.subView2.setElement('.some-el').render();
}
Ho un po 'mescolato e abbinato un sacco di pratiche diverse in tutti questi esempi (quindi mi dispiace per quello) ma quali sono quelli che vorresti mantenere o aggiungere? e cosa non faresti?
Riepilogo delle pratiche:
- Creare istanze secondarie in
initializeo inrender? - Eseguire tutta la logica di rendering della vista secondaria in
rendero inonRender? - Usa
setElementoappend/appendTo?
closemetodo e un metodo per onCloseripulire i bambini, ma sono solo curioso di sapere come creare un'istanza e renderli in primo luogo.
deletein JS non è lo stesso deletedi C ++. È una parola chiave con un nome molto scarso se me lo chiedi.