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));