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 tagName
elemen-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 onRender
acara:
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 onRender
acara:
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
initialize
atau dirender
? - Melakukan semua logika render tampilan sub-view di
render
atau dionRender
? - Gunakan
setElement
atauappend/appendTo
?
close
metode dan metode onClose
yang membersihkan anak-anak, tetapi saya hanya ingin tahu tentang cara membuat instance dan membuat mereka di tempat pertama.
delete
di JS tidak sama dengan delete
dari C ++. Kata kunci dengan nama sangat buruk jika Anda bertanya kepada saya.