Основано на this question. Я перехожу из RequireJS, чтобы обозревать (вместе с babelify) и попытаться переписать мои текущие модули на классы. Для каждого из моих модулей RequireJS у меня есть метод eventHandler
, который обрабатывает все общие события, связанные с модулем. Теперь, когда я расширяю класс, родительский класс вызывает метод eventHandler
подкласса, который приводит к вызову метода дважды.Обработка событий с подклассами
Однако есть еще одна проблема с моим текущим кодом. У меня также есть два метода для нескольких модулей для связывания и отвязывания событий. Сайт, над которым я работаю, - это отзывчивый сайт, который имеет один и тот же JS по всем размерам устройства. На некоторых размерах экрана (контрольных точках) я хочу связать определенные события, а с другими я не должен (или даже отпереть их при выходе из другой точки останова). Так типичный модуль будет выглядеть более или менее так:
'use strict';
let specificEventsBound = false;
class Tooltip {
constructor() {
this.eventHandler();
}
eventHandler() {
// bind general events across all breakpoints
}
bindSpecificEvents() {
// bind breakpoint specific events
specificEventsBound = true;
}
unbindSpecificEvents() {
// unbind breakpoint specific events
specificEventsBound = false;
}
checkBreakpoint() {
if(someBreakpoint) {
this.bindSpecificEvents();
} else {
this.unbindSpecificEvents();
}
}
}
module.exports = Tooltip;
Когда я теперь продлить этот класс и реализовать checkBreakpoint
с в подклассе другого someBreakpoint
, тем bindSpecificEvents
и unbindSpecificEvents
равно будут вызваны, когда супер методы get invoked. Я думаю, что мне нужно изменить, как я сейчас обрабатываю события ... Не могли бы вы предложить мне, как правильно справиться с этим? Возможно, отдельный класс для обработки событий с помощью методов регистрации и снятия?
Что вы подразумеваете под * «Когда я знаю, расширяю этот класс и реализую checkBreakpoint с другой someBreakpoint в подклассе, bindSpecificEvents и unbindSpecificEvents будут по-прежнему вызываться при вызове супер-методов.» *? В 'Tooltip' вызовы' this.checkBreakpoint' вызовут фактическую 'checkBreakpoint' в экземпляре, которая будет определяться классом, который был создан (например, подкласс). –