app.myView = Backbone.View.extend({
events: {
'mouseenter .myitem': 'myfunction'
}
});
我如何将此事件的创建延迟到某个时间或直到我决定要创建它。现在它是在我的视图加载后立即创建的,并且一旦我输入 .myitem 就会触发 mouseevent
app.myView = Backbone.View.extend({
events: {
'mouseenter .myitem': 'myfunction'
}
});
我如何将此事件的创建延迟到某个时间或直到我决定要创建它。现在它是在我的视图加载后立即创建的,并且一旦我输入 .myitem 就会触发 mouseevent
你总是可以手动创建它(使用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));
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';
将改变events
视图的所有实例。这样做的好处是调用undelegateEvents
将做正确的事情,并且您的所有视图事件都将以相同的方式处理。
演示:http: //jsfiddle.net/ambiguous/Bd4SB/