Как правильно преобразовать кастомный js-код в приложение?

Есть некоторые события jquery повешанные на кастомные элементы.
Выглядит это так:
$('.added').on('focus', 'input.timepicker', function(){
});
$('.added').on('click', '.remove-timework', function(){
});
$('.added').on('click', '.add-timework', function(){
});

Мне не нравится ни навешивание $.on на класс, который может измениться, ни тройной повтор его использования, ни количество лишних строк. Подскажите пожалуйста, каким образом преобразовать его в модуль типа
var App = {};
Про паттерн "модуль" я читал у Addy Osmani. Но у меня пока не сходится вот такой "процедурный стиль" использующий jquery с построением отдельного класса.
  • Вопрос задан
  • 285 просмотров
Решения вопроса 1
k12th
@k12th
console.log(`You're pulling my leg, right?`);
Для начала, var App = {}; — это не модуль, а переменная (да еще с неправильным типом названия). Модули — это CommonJS или AMD. Если действительно разнести код по модулям, то уже станет проще с ним управляться.

Что до навешивания событий — эту проблему очень изящно решили в Backbone, скопипастить оттуда имплементацию дело пяти минут.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Petroveg
@Petroveg
Миром правят маленькие с#@&ки
1. Вам не показалось, для функциональности лучше использовать data-атрибуты, что позволить использовать события без привязки к стилевому оформлению.

2. Навешивание нескольких обработчиков на одно событие в одном и том же узле — нормальная практика, если код в обработчиках не связан (не конфликтует с другими, код разных обработчиков не должен выполняться в строго определённом порядке). Это позволяет снимать тот ли иной обработчик при необходимости, не затрагивая работу остальных.

3. В динамически изменяющейся структуре предпочтительней использовать всплытие событий. Например, так:

$(document).on('click', 'selectors', function () {...});

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

4. Регистрация обработчика в конкретном узле позволяет остановить всплытие события. Это — одна из основных причин регистрации обработчиков не в window или document, а в конкретном узле.
Другая причина — не реагировать на события в однотипных узлах за пределами конкретного элемента. Пример — вы вставляете область, в которой и реализован функционал (например, область с картой).
Ответ написан
Комментировать
smanioso
@smanioso
Отмечайте ответы на свои вопросы!
Посмотрите сразу в сторону React.js - facebook.github.io/react
Если же не хочется использовать реакт, то можно взять за основу Backbone + Marionette
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы