我在我的html中使用bootstrap选项卡,以及事件和模型的主干。我想为引导程序触发tab显示的事件,以便我可以处理事件以创建另一个视图(子视图)。
这是我的代码:
var HeaderView = Backbone.View.extend({
...
events : {
'shown.bs.tab ul.nav-tabs>li>a': 'onTabShown'
},
initialize:function() {
console.log("Header view initialize executing...");
this.template =_.template(UserTemplate, this.collection);
this.render();
this.$el.find('div.toolbar ul.nav-tabs>li:first>a').tab('show');
//$('ul.nav-tabs>li:first>a').tab('show');
},
onTabShown: function() {
console.log('tab shown event!');
}
...
}
但是,即使初始化代码执行成功,显示的事件选项卡也不会触发。就此而言,在initialize()中引发的任何UI事件都不会触发。
如果我在创建后调用视图模块外部的事件触发器,则此方法有效。
是否可能未触发UI事件,因为视图尚未完全初始化,因为初始化仍在执行?似乎解决方法是从此View之外的其他一些代码调用tab显示事件的触发器。有没有更好的方法或做法?
答案 0 :(得分:0)
这不起作用,因为你没有调用" delegateEvents"。 将this.delegateEvents()添加到初始化中,它将起作用。 现在,它没有按预期工作的原因是因为你正在初始化方法中完成所有工作,在委托事件之前,Backbone.View构造函数调用该方法。除了在Backbone.View的initialize方法中初始化之外,做任何事都被认为是一种非常糟糕的做法。另外,节省时间,使用木偶......