Отмена подписки на опубликованное событие с помощью JavaScript

#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 не поддерживает настоящие пространства имен (только объекты, которые, как я предполагаю, вы используете).