ネストされたビューのセットアップがあり、アプリケーションで多少深くなる可能性があります。サブビューを初期化、レンダリング、および追加する方法はたくさんありますが、一般的な方法は何なのでしょうか。
ここに私が考えたカップルがあります:
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();
}
長所:追加で正しいDOM順序を維持することを心配する必要はありません。ビューは早い段階で初期化されるため、render関数では一度にすべてを実行する必要はありません。
短所:コストがかかる可能性のあるredelegateEvents()を強制されますか?親ビューのレンダリング関数は、発生する必要のあるすべてのサブビューレンダリングで乱雑になりますか?tagName要素のを設定する機能がないため、テンプレートは正しいtagNamesを維持する必要があります。
別の方法:
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);
}
長所:イベントを再委任する必要はありません。空のプレースホルダーのみを含むテンプレートは必要なく、tagNameはビューで定義された状態に戻ります。
短所:正しい順序で追加する必要があります。親ビューのレンダリングは、サブビューレンダリングによってまだ乱雑です。
onRenderイベント:
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();
}
長所:サブビューのロジックがビューのrender()メソッドから分離されました。
onRenderイベント:
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();
}
私はいくつかの種類を組み合わせて、これらすべての例でさまざまなプラクティスの束を一致させました(それで申し訳ありません)。そして、あなたは何をしませんか?
実践の要約:
initializeまたはでサブビューをインスタンス化しrenderますか?- すべてのサブビューレンダリングロジックをで実行
renderしonRenderますか? setElementまたは使用しますかappend/appendTo?
closeメソッドとを持っていonCloseますが、最初にそれらをインスタンス化してレンダリングする方法に興味があります。
deleteJSのdeleteC ++ と同じではありません。あなたが私に尋ねると、それは非常に貧弱な名前のキーワードです。