Twitter bootstrap 主干视图为什么可以';在初始化中是否触发UI事件?

Twitter bootstrap 主干视图为什么可以';在初始化中是否触发UI事件?,twitter-bootstrap,backbone.js,Twitter Bootstrap,Backbone.js,我在html中使用引导选项卡,并为事件和模型使用主干。我想为引导触发tab Showed事件,这样我就可以处理该事件来创建另一个视图(子视图) 这是我的代码: var HeaderView = Backbone.View.extend({ ... events : { 'shown.bs.tab ul.nav-tabs>li>a': 'onTabShown' }, initialize:function() { conso

我在html中使用引导选项卡,并为事件和模型使用主干。我想为引导触发tab Showed事件,这样我就可以处理该事件来创建另一个视图(子视图)

这是我的代码:

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!');
    }
    ...
}
但是,即使初始化代码成功执行,tab Showed事件也不会触发。因此,initialize()中引发的任何UI事件都不会触发

如果我在创建后在视图模块外部调用事件触发器,则此操作有效


是否可能由于视图尚未完全初始化而未触发UI事件,因为仍在执行初始化?似乎解决方法是从该视图之外的其他代码调用tab-show事件的触发器。有没有更好的方法或做法?

这不起作用,因为您没有调用“delegateEvents”。 将这个.delegateEvents()添加到初始化中,它就会工作。
现在,它不能按预期工作的原因是,您在initialize方法中完成了所有工作,该方法由主干.View构造函数在委托事件之前调用。在Backbone.View的initialize方法中,除了初始化之外,执行任何操作都被认为是一种非常糟糕的做法。另外,节省自己的时间,使用木偶……

好的。对于第二个建议,我确实在上面的应用程序中使用了木偶。为简洁起见,我没有显示这些。如果您使用的是木偶,区域的show方法将调用render,因此这是在initialize()中调用它的另一个原因no。将
选项卡('show')
放在onRender方法中。