如何将backbone.js中的事件绑定延迟到某个时间之后

how do i delay binding a event in backbone.js until after a certian time?

本文关键字:迟到 延迟 之后 时间 绑定 事件 backbone js      更新时间:2023-09-26
app.myView = Backbone.View.extend({
   events: {
   'mouseenter .myitem': 'myfunction'
   }    
});

我如何将此事件从创建延迟到某个时间,或者直到我决定要创建它。现在,我的视图一加载就创建它,鼠标事件一输入就触发。myitem

Backbone使用delegateEvents:绑定视图事件

委派事件delegateEvents([events])

使用jQuery的on函数为视图中的DOM事件提供声明性回调。如果没有直接传递事件哈希,则使用this.events作为源
[…]
delegateEvents再次运行时,可能会使用不同的events哈希,所有回调都会被删除并重新委派——这对于在不同模式下需要表现不同的视图非常有用。

只要您想更改事件绑定,就可以调用delegateEvents。因此,一种方法是调整this.events并调用this.delegateEvents():

add_event: function() {
    this.events = _({}).extend(this.events, {
        'mouseenter .myitem': 'myfunction'
    });
    this.delegateEvents();
}

extend调用是个好主意,因为Backbone.View.extend会让events附加视图的原型,所以只需更改this.events:

this.events['mouseenter .myitem'] = 'myfunction';

将改变视图的所有实例的CCD_ 13。这样做的好处是,调用undelegateEvents将做正确的事情,并且所有视图事件都将以相同的方式处理。

演示:http://jsfiddle.net/ambiguous/Bd4SB/

您总是可以手动创建它(使用events对象只是一种快捷方式(:

// call this somewhere once you're ready to attach the callback method    
this.$el.on(eventName, _.bind(method, this));

或者以你的例子:

this.$el.on('mouseenter .myitem', _.bind(this.myfunction, this));