Backbone.js: привязывать / отменять привязку событий между представлениями - PullRequest
2 голосов
/ 18 ноября 2011

Я использую шаблон агрегатора событий Дерика Бэйли , где он проиллюстрировал шаблон, в котором объект управляет подъемом событий и подписчиками этих событий.

Все работало нормально, когда я запускал события в одном представлении и подписывался на них в другом. Проблема возникла, когда два или более представлений подписываются на событие, а затем во время отбрасывания представления одно из представлений отменяет подписку на событие. Это приводит к тому, что все остальные виды также будут отписаны от события.

Есть ли какое-то решение для этого?

Обновление

Вот небольшой фрагмент кода, который я использую на мой взгляд:

var EventAggregator = _.extend({}, Backbone.Events);
new MyView({
    collection: MyCollection,
    eventagg: EventAggregator
});
MyView = Backbone.View.extend({
    initialize: function() {
        _.bindAll(this, 'render', 'close', 'actionFnc');
        this.childviews = [];
        this.options.eventagg.bind('evt:action', this.actionFnc);
        this.render();
    },
    render: function() {
    },
    close: function() {
        _(this.childViews).each(function(childview) {
            childview.close();
        });
        $(this.el).empty();
        this.options.eventagg.unbind('evt:action');
    },
    actionFnc: function() {
        // do something over here
    }
});

1 Ответ

4 голосов
/ 18 ноября 2011

измените следующую строку:

this.options.eventagg.unbind('evt:action');

на

this.options.eventagg.unbind('evt:action', this.actionFnc);
...