「関心の分離」モデルに従います。タブ ナビゲーションを処理するメイン コンテンツ ビューができました。誰かがタブをクリックするたびに、そのメイン コンテンツ ビューは、そのタブが現在アクティブであることをビューに伝える必要があります。次に、そのサブビューがそこから物事を処理します。コード例を次に示します。
これがHTMLだとしましょう:
<div id="tabContainer" class='tabs'>
<div class='tab' id="content1Tab"></div>
<div class='tab' id="content2Tab"></div>
<div class='tab' id="content3Tab"></div>
</div>
<div id="contentContainer">
</div>
これはおそらくjavascriptです。
ContentView = new (Backbone.View.extend({}
events: {
'click .tab': 'openTab'
},
el: $("#tabContainer"),
tabViews: {},
openTab: function (e) {
var el = $(e.currentTarget);
$("#contentContainer").children().detach();
if(!this.tabViews[el.attr('id')]) {
this.tabViews[el.attr('id')] = this.createTabViewForEl(el);
}
this.tabViews[el.attr('id')].render($("#contentContainer"));
},
createTabViewForEl: function (el) {
var tab;
switch(el.attr('id')) {
case "content1Tab":
tab = new FirstContentTab();
break;
/* etc */
}
return tab;
}
))();
FirstContentTab = Backbone.View.extend({
render: function (targetEl) {
this.setElement($("#someContentEl"));
this.$el.appendTo(targetEl);
}
/** stuff like loading in content for tab, or making a monkey dance when it opens **/
});
タブが属しているモジュールを参照し、requirejs やその他のモジュール ローダーを使用してそのモジュールをロードし、問題のタブを指定するなど、より洗練された方法があります。ただし、どちらにしても、その 1 つのメイン ビューでやりすぎないようにしてください。そうしないと、必要以上に複雑なものになってしまいます。