#javascript #widget #dom-events #publish-subscribe
#javascript #виджет #dom-события #опубликовать -подписаться
Вопрос:
У меня есть веб-сайт, на который пользователи могут динамически добавлять виджеты. Эти виджеты используют подключаемый модуль Peter Higgins pub / sub для $.(subscribe)
подключения к событию, созданному $.(publish)
из другого «основного» модуля.
У меня есть виджеты в их собственном пространстве имен, подобные этому:
km.widget.name1,
km.widget.name2,
и т.д.
Таким образом, дескрипторы, созданные $.(subscribe)
, не являются глобальными.
Я не знаю, как отменить подписку на эти виджеты, когда пользователь решает удалить виджет со своей пользовательской страницы.
Кроме того, как я узнаю, от какого виджета отказаться?
Комментарии:
1. Вы нашли хорошее решение для этого? Довольно скоро у нас возникнет та же проблема. Было бы интересно посмотреть, как вы это решили.
Ответ №1:
Это не решает вашу проблему напрямую, но вполне может вам помочь. Это недавний блог Сэма Клирмана. Он описывает способ обработки событий публикации / подписки без использования этого плагина:
Пользовательские события jQuery предоставляют встроенные средства для использования шаблона публикации подписки способом, который функционально эквивалентен и синтаксически очень похож на плагин pub / sub от Higgin: просто привязать наблюдателей к документу.
Делая это таким образом, вы, возможно, сможете решить свои текущие проблемы.
Комментарии:
1. Я видел эту статью раньше, и я просто не уверен, что это правильный ответ.
Ответ №2:
Я раньше не использовал плагин pubsub, но я просто взглянул на исходный код, и похоже, что вы можете отказаться от подписки точно так же, как вы подписываетесь, просто используя $.unsubscribe(...)
вместо $.subscribe(...)
.
Это то, что вы уже знаете, и проблема вызвана вашим пространством имен виджетов? В любом случае, я не действительно уверен в том, что вы подразумеваете под пространством имен, поскольку JavaScript не поддерживает настоящие пространства имен (только объекты, которые, как я предполагаю, вы используете).