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/