app.myView = Backbone.View.extend({
events: {
'mouseenter .myitem': 'myfunction'
}
});
如何将此事件从创建延迟到某个时间或直到我决定要创建它为止。现在它是在我的视图加载后立即创建的,只要我输入就会触发mouseevent .myitem
答案 0 :(得分:2)
您可以随时手动创建它(使用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));
答案 1 :(得分:2)
Backbone使用delegateEvents
绑定视图事件:
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';
会改变视图的所有实例的events
。这样做的好处是,调用undelegateEvents
将执行正确的事情,所有视图事件将以相同的方式处理。