これで、ナビゲーションとダッシュボードの概念が得られました。ルーターでナビゲーションリンクをクリックすると、アクティブなタブを設定するためにダッシュボードビューが呼び出されます。例えば1つのdivを複数のバックボーン・ビューのコンテナとして使用してイベント・バインディングを失う
:
NAV
<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>
DASHABORDVIEW
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に切り替えると、タブが期待通りに読み込まれます。しかし、私はタブに切り替える場合は、それから切り替え、それに戻ってスイッチ、私のビュー内のすべてのイベントはもはやバインドされていません。 、
過去のソリューション:クリックすると、hoevering、例えばfoobars_view内部の意見のどれもが、私は、各そうのような子ビューのいずれかのラッパーを作っている、など過去に
、hoverable、クリック可能ではありませんピタパン:
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の中でビューのエルを置くという考えのようなやり方はしないだろう私がしたいと思うようにしてください、私はちょうど上に示した方法の代替ですか?ありがとう!
:この場合、ビュー上の
bind_events
方法のいくつかの並べ替えは、理にかなって。私は、widgetsviewとfoobarviewの両方が独自の子ビューを持っていることに注意してください。違いがありますか? – jdkealy@ jdkealy: 'empty'呼び出しが** all **イベントバインディングを殺してしまうので、おそらく' delegateEvents'をすべて終了させる必要があります。必要な 'delegateEvents'を行うビューのメソッド(例えば' rebind_all_events')は、物事を適切にカプセル化しておくことを意味します。 –
ああ、私が今見ているのは、単純な見方をするとうまくいきます。そうですね、私の見解はあまりにも深く行きます。私はdelegateEventsをチェーンのすべてのところで呼び出すと思います。これは将来の参照のために知っておくと良いですが、私はshow/hideメソッドまたはoffsetメソッドを使うつもりだと思います。ありがとう! – jdkealy