Перехват события удаления при просмотре в Backbone js

Есть ли способ прослушать событие удаления/уничтожения в представлении Backbone?

Я хочу сделать что-то вроде следующего:

$(myBackboneView).on('remove', function () {
    // do some processing
});

or

$(myBackboneView).on('destroy', function () {
    // do some processing
});

Заранее спасибо. :)


person Rahul Bhanushali    schedule 27.01.2014    source источник
comment
Да, мне нужно выполнить некоторую обработку, прежде чем представление будет полностью удалено.   -  person Rahul Bhanushali    schedule 27.01.2014


Ответы (3)


Вы можете попробовать переопределить метод View.remove::

Backbone.View.extend({
    remove: function(){
        // Your processing code here

        Backbone.View.prototype.remove.apply(this, arguments);
    };
});
person Felix    schedule 27.01.2014
comment
Спасибо большое. Этот работает для меня очень хорошо :) - person Rahul Bhanushali; 27.01.2014

Я попробовал следующее, и это работает для меня:

$(myBackboneView.el).on('remove', function () {
    // do some processing
});

Это хороший подход? Или есть что-то еще лучше, чем это?

person Rahul Bhanushali    schedule 27.01.2014
comment
Событие удаления не является частью jQuery, оно добавляется jQuery UI версии 1.10.2 и выше. - person smilly92; 01.04.2015
comment
Небольшое замечание: $(myBackboneView.el) предоставляется по умолчанию как myBackboneView.$el или this.$el, если вы находитесь внутри модели View. - person Koen Betsens; 14.11.2015
comment
Следовательно, myBackboneView.$el должен дать тот же результат. - person Edwin; 05.06.2017

Если вам нужно прослушивать удаление других представлений, вы можете настроить базовый класс представления для запуска события «удалить» при вызове метода remove().

BaseView = Backbone.View.extend({
    remove: function () {
        this.trigger('remove', this)
        return Backbone.View.prototype.remove.apply(this, arguments)
    }
})

Тогда слушайте это, когда захотите:

this.listenTo(otherView, 'remove', func)
person david.muffley    schedule 01.08.2016