Задать вопрос
@unabl4
ruby on rails web dev

JQuery 1.9.0+ убрали одну фишку, чем заменить?

Всем доброго времени суток.

У нас в проекте долгое время использовалась версия 1.8.3 (да, старенькая, но работала и ладно).
Решили обновить стек технологий (версии), и вот руки дошли до jQuery. Обновились до самой последней версии и обнаружили, что часть функционала сайта больше не работает.

А именно, перестал работать $.event.trigger.
Мы его использовали при асинхронных "JS" ответах с сервера.
Чем удобно? А удобно тем, что на самой странице можно было подписать нужные элементы, чтоб они слушали какое-либо событие, и вызвав $.event.trigger событие было доставлено всем подписчикам. При этом тот, кто посылает сообщение вообще даже понятия не имеет, подписан ли кто на его события и как их звать-величать.
Т.е было хорошее разделение и так было очень легко и приятно работать. Но тут, в версии 1.9.0 это всё резко перестаёт работать. Чем можно заменить?

Очень бы не хотелось подключать какую-нибудь pub/sub библиотеку.
Ещё говорят, что можно подключить jquery-migrate, но, я так понял, она тут не поможет, потому что она призвана помочь разработчику перейти на новые стандарты и фишки, а потом отключить эту библиотеку.

Фиддл: jsfiddle.net/JsUWv/3552 (просто поменяйте версию на версию постарше, например, 1.9.1)

Всем спасибо!
  • Вопрос задан
  • 422 просмотра
Подписаться 2 Оценить Комментировать
Решения вопроса 1
Можно использовать плагин Global custom events. Вот Ваш Пример
Логика следующая
  • Подключаем себе данный плагин
  • Заменяем $.event.trigger( 'eventName', ... ) на $.gevent.publish( 'eventТame', ...)
  • В подписчиках заменяем $elems.on( 'eventName', handler) на $.gevent.subscribe( $elems, 'eventName', handler)
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Petroveg
@Petroveg
Миром правят маленькие с#@&ки
ИМХО лучше использовать сервисный слой для регистрации обработчиков. Не могу пока выбрать между медиатором и наблюдателем.
Ответ написан
IonDen
@IonDen
JavaScript developer. IonDen.com
Не наводите панику, просто по другому надо писать.

$elems.trigger("fire", 1);
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
22 дек. 2024, в 20:40
10000 руб./за проект
22 дек. 2024, в 20:34
3000 руб./за проект
22 дек. 2024, в 20:12
10000 руб./за проект