さて、ナビゲーションとダッシュボードの概念ができました。ルーターでナビゲーション リンクをクリックすると、ダッシュボード ビューを呼び出してアクティブなタブを設定します。
例えば:
基準価額
<a href="#" class="dashabord_tab" id="widgets">Widgets</a>
<a href="#" class="dashabord_tab" id="Foobars">Foobars</a>
dashboard_container.jst.tpl
<div id="nav"></div>
<div id="current_tab"></div>
ダッシュボードビュー
DashboardView = Backbone.View.extend({
template:JST.dashboard_container,
render: function(){
$(this.el).html(this.template());
},
activateWidgets: function(){
if(!(this.widgets_view)){
this.widgets_view = new WidgetsView();
this.widgets_view.render();
}
$(this.el).find("#current_tab").html(this.widgets_view.el);
},
activateFoobars: function(){
if(!(this.foobars_view)){
this.foobars_view = new FooBarsView();
this.foobars_view.render();
}
$(this.el).find("#current_tab").html(this.foobars_view.el);
}
});
問題:
したがって、最初に widgets_tab または foobar_tab に切り替えると、タブが期待どおりに読み込まれます。ただし、タブに切り替えてから切り替えてから元に戻すと、ビュー内のすべてのイベントがバインドされなくなります。クリック、ホバーリング、たとえば foobars_view 内のビューはどれもクリック可能、ホバー可能などではありません。
以前は、次のように子ビューごとにラッパーを作成していました。
過去の解決策、ピタ:
activateFoobars: function(){
$('.tab_wrapper').hide();
if($(this.el).find("#foobars_wrapper").length < 1){
$(this.el).append("<div class='tab_wrapper' id='foobars_wrapper'></div>");
this.foobars_view = new FooBarsView();
$(this.el).find("#foobars_wrapper").html(this.foobars_view.render().el);
}
$('#foobars_wrapper').show();
}
上で示した方法ではなく、常に開いたままの active_tab div にビューの el を配置するというアイデアが本当に気に入っています...私が望む方法でそれを行うことができない場合に、私が上で示した方法に代わるものはありますか? ありがとう!