好的,所以我有一个导航和仪表板的概念。在我的路由器中,当我单击导航链接时,我正在调用我的仪表板视图来设置活动选项卡。
例如:
资产净值
<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();
}
我宁愿不按照上面显示的方式进行操作,而且我真的很喜欢将视图的 el 放在始终保持打开状态的 active_tab div 中的想法……如果我不能按照我想要的方式进行操作to,有没有替代我刚才展示的方式?谢谢!