0

如果我在一个对象上有一个事件聚合器,

eventAggregator: _.extend({}, Backbone.Events),

对于模态视图,我基本上让模态视图的演示者监听模态视图的事件。

this.eventAggregator.on('modal:close', function () {
console.log('do some clean up');
});

当模态视图消失时,我打电话

this.unbind(); 

这会删除所有事件吗?还是我需要做类似的事情

this.eventAggregator.off('modal:close');

提前致谢!

4

3 回答 3

2

在最近的 Backbone 中有listenTo( http://backbonejs.org/#Events-listenTo ),因此您可以通过以下方式订阅事件:

this.listenTo(this.eventAggregator, 'modal:close', function () {
    console.log('do some clean up');
})
this.listenTo(this.model, 'change', this.doSomeStuff);

然后,如果您需要取消订阅,只需调用以下命令:

this.stopListening();

view.remove或者使用( http://backbonejs.org/#View-remove )删除您的视图,它会view.stopListening在后台调用。

于 2013-05-01T07:53:45.603 回答
1

o.unbind()对里面的对象一无所知o,它只知道绑定到o使用o.on(AKA o.bind)的东西。所以不,this.unbind()不会对绑定到的事情做任何事情this.eventAggregator,你必须:

this.eventAggregator.unbind();
this.unbind();

清除这两个列表。

于 2013-05-01T03:49:59.133 回答
0

如果您想使用 on/off 来绑定/取消绑定事件,您可以这样做。

//declare some global object to get the scope.
window.eventAggregator = _.extend({}, Backbone.Events);

现在在主干视图中:

var SomeView = Backbone.View.extend({
    el : 'body',
    initialize : function() {

        //pass the context as this object
        eventAggregator.on('modal:close', function(data) {
            console.log('Clean up');
            eventAggregator.off('modal:close', null, this);
        }, this);
    }
});

eventAggregator.off('modal:close', null, this);它将帮助您关闭绑定到“this”当前视图对象的事件。

于 2013-05-03T10:32:58.823 回答