1
app.myView = Backbone.View.extend({
   events: {
   'mouseenter .myitem': 'myfunction'
   }    
});

我如何将此事件的创建延迟到某个时间或直到我决定要创建它。现在它是在我的视图加载后立即创建的,并且一旦我输入 .myitem 就会触发 mouseevent

4

2 回答 2

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));
于 2013-02-11T00:16:33.993 回答
2

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/

于 2013-02-11T01:01:24.007 回答