Saya memiliki pengaturan nested-View yang bisa agak dalam di aplikasi saya. Ada banyak cara yang bisa saya pikirkan untuk menginisialisasi, merender, dan menambahkan sub-view, tapi saya bertanya-tanya apa praktik umum itu.
Berikut adalah beberapa yang pernah saya pikirkan:
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: Anda tidak perlu khawatir tentang mempertahankan pesanan DOM yang tepat dengan menambahkan. Tampilan diinisialisasi sejak awal, jadi tidak banyak yang bisa dilakukan sekaligus dalam fungsi render.
Kekurangan: Anda dipaksa untuk mendelegasikan kembali Acara (), yang mungkin mahal? Fungsi render tampilan orangtua berantakan dengan semua rendering subview yang perlu terjadi? Anda tidak memiliki kemampuan untuk mengatur tagNameelemen-elemen, sehingga templat perlu mempertahankan tagNames yang benar.
Cara lain:
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: Anda tidak perlu mendelegasikan kembali acara. Anda tidak perlu templat yang hanya berisi tempat penampung kosong dan tagName Anda sudah kembali ditentukan oleh tampilan.
Cons: Anda sekarang harus memastikan untuk menambahkan hal-hal dalam urutan yang benar. Render tampilan orangtua masih berantakan oleh rendering subview.
Dengan sebuah onRenderacara:
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: Logika subview sekarang dipisahkan dari metode tampilan render().
Dengan sebuah onRenderacara:
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();
}
Saya telah mencampur dan mencocokkan sekelompok praktik berbeda di semua contoh ini (sangat menyesal tentang hal itu), tetapi apa saja yang akan Anda pertahankan atau tambahkan? dan apa yang tidak akan kamu lakukan?
Ringkasan praktik:
- Instantiate subview di
initializeatau dirender? - Melakukan semua logika render tampilan sub-view di
renderatau dionRender? - Gunakan
setElementatauappend/appendTo?
closemetode dan metode onCloseyang membersihkan anak-anak, tetapi saya hanya ingin tahu tentang cara membuat instance dan membuat mereka di tempat pertama.
deletedi JS tidak sama dengan deletedari C ++. Kata kunci dengan nama sangat buruk jika Anda bertanya kepada saya.