Eu tenho uma configuração de exibição aninhada que pode se aprofundar um pouco no meu aplicativo. Há várias maneiras pelas quais eu poderia pensar em inicializar, renderizar e anexar as sub-visualizações, mas estou me perguntando o que é uma prática comum.
Aqui estão alguns que eu pensei:
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();
}
Prós: você não precisa se preocupar em manter a ordem DOM correta ao anexar. As visualizações são inicializadas desde o início, portanto, não há muito o que fazer de uma vez na função de renderização.
Contras: Você é forçado a delegar novamente novamenteEvents (), o que pode ser caro? A função de renderização da visualização pai está cheia de toda a renderização da subvisão que precisa acontecer? Você não tem a capacidade de definir os tagName
elementos, portanto, o modelo precisa manter os tagsNames corretos.
Outra maneira:
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);
}
Prós: você não precisa delegar novamente os eventos. Você não precisa de um modelo que contenha apenas espaços reservados vazios e os seus tagName voltem a ser definidos pela exibição.
Contras: agora você precisa anexar as coisas na ordem certa. A renderização da visualização pai ainda é confusa pela renderização da subvisão.
Com um onRender
evento:
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();
}
Prós: a lógica da subvisão agora está separada do render()
método da visualização .
Com um onRender
evento:
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();
}
Eu meio que misturei e combinei várias práticas diferentes em todos esses exemplos (desculpe por isso), mas quais são as que você gostaria de manter ou adicionar? e o que você não faria?
Resumo das práticas:
- Instanciar sub-visualizações dentro
initialize
ou dentrorender
? - Executar toda a lógica de renderização de sub-visualização em
render
ou dentroonRender
? - Use
setElement
ouappend/appendTo
?
close
método e um onClose
que limpa crianças, mas só estou curioso sobre como instanciar e renderizá-las em primeiro lugar.
delete
em JS não é o mesmo que delete
em C ++. É uma palavra-chave com um nome muito ruim, se você me perguntar.