0

В компании я работаю, мы решили извлечь большую часть нашего кода Marionette.js и разделить их на несколько Rails Gems.Override Backbone.Wreqr.radio handlers

В этот момент мне удалось разделить контроллеры и представления Marionette. Некоторые из продуктов внутри контроллеров Marionette необходимы для большинства наших приложений для электронной коммерции, поэтому я извлек этот код JavaScript в несколько Gems. Затем мы сможем использовать материал, который мы уже разделили на Gems, и переопределить/расширить контроллеры/представления, когда это необходимо.

Для действий в приложении мы используем Backbone.Wreqr. Пример обработчика события, найденный в одном из наших самоцветов:

Backbone.Wreqr.radio.commands.setHandler('product', 'show', function (slug) { 
    API.showSingleProduct(slug); 
    App.navigate("/products/" + slug); 
}); 

Однако для некоторых из наших приложений, мы должны переопределить этот обработчик, чтобы заставить его работать с некоторыми пользовательскими вещами в нашем проекте.

Представьте себе, я хочу, чтобы изменить приведенный выше обработчик к чему-то вроде этого:

Backbone.Wreqr.radio.commands.setHandler('product', 'show', function (slug, color) { 
    API.showSingleProduct(slug, color); 
    App.navigate("/products/" + slug); 
}); 

Когда я добавить такой обработчик события в нашем базовом проекте, это событие будет называться дважды. Мне нужен только последний обработчик события (настраиваемый), который нужно запустить.

Есть ли способ переопределить существующие события Backbone.Wreqr? Или мне нужно удалять предыдущие обработчики каждый раз, когда я хочу настроить поведение предыдущего обработчика?

ответ

1

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

Ваш код должен работать с точки зрения регистрации одного обработчика, проблема должна быть в другом месте.