Uygulamamda biraz derinleşen iç içe görünüm kurulumum var. Alt görünümleri başlatmayı, oluşturmayı ve eklemeyi düşünebileceğim birçok yol var, ancak ortak uygulamanın ne olduğunu merak ediyorum.
İşte düşündüğüm bir çift:
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();
}
Artıları: Ekleyerek doğru DOM sırasını korumak konusunda endişelenmenize gerek yok. Görünümler erken başlatılır, bu nedenle oluşturma işlevinde bir kerede yapılacak çok fazla şey yoktur.
Eksileri: Eğer pahalı olabilir yeniden delegateEvents () zorla? Üst görünümün oluşturma işlevi, gerçekleşmesi gereken tüm alt görünüm oluşturma işlemiyle karışık mı? tagName
Öğeleri ayarlama olanağınız yok , bu nedenle şablonun doğru tagNames'i tutması gerekiyor.
Diğer yol:
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);
}
Artıları: Etkinlikleri yeniden temsil etmek zorunda değilsiniz. Yalnızca boş yer tutucuları içeren bir şablona ihtiyacınız yoktur ve tagName'leriniz görünüm tarafından tanımlanmaya geri döner.
Eksileri: Artık doğru sırayla bir şeyler eklediğinizden emin olmalısınız. Üst görünümün görüntüsü, alt görünümün oluşturulmasıyla hala karışık.
Bir onRender
etkinlikle:
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();
}
Artıları: Alt görünüm mantığı artık görünümün render()
yönteminden ayrılmıştır .
Bir onRender
etkinlikle:
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();
}
Bu örneklerin birçoğunu farklı şekillerde karıştırdım ve eşleştirdim (bunun için çok üzgünüm), ancak saklayacağınız veya ekleyeceğiniz şeyler neler? ve ne yapmazdın?
Uygulamaların özeti:
- Alt görünümler içinde
initialize
mi, içinderender
mi? - Tüm alt görünüş render mantığı gerçekleştir
render
veyaonRender
? - Kullan
setElement
veyaappend/appendTo
?
close
yöntemim ve bir yöntemim var onClose
, ama sadece onları nasıl başlatacağımızı ve ilk etapta nasıl oluşturacağımı merak ediyorum.
delete
JS de delete
C ++ ile aynı değildir . Bana sorarsanız çok kötü adlandırılmış bir anahtar kelime.