骨干视图为什么我不能在初始化时触发UI事件?

时间:2015-05-16 07:16:41

标签: twitter-bootstrap backbone.js

我在我的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显示事件的触发器。有没有更好的方法或做法?

1 个答案:

答案 0 :(得分:0)

这不起作用,因为你没有调用" delegateEvents"。 将this.delegateEvents()添加到初始化中,它将起作用。 现在,它没有按预期工作的原因是因为你正在初始化方法中完成所有工作,在委托事件之前,Backbone.View构造函数调用该方法。除了在Backbone.View的initialize方法中初始化之外,做任何事都被认为是一种非常糟糕的做法。另外,节省时间,使用木偶......