2010-12-15 3 views
0

J'ai un site Web auquel les utilisateurs peuvent ajouter des widgets de façon dynamique. Ces widgets utilisent le plug-in pub/sub Peter Higgins à $. (Subscribe) pour un événement I $. (Publier) d'un autre module 'core'.Désinscription d'un événement publié avec JavaScript

J'ai des widgets dans leur propre espace de nom comme celui-ci: km.widget.name1, km.widget.name2, etc.

Ainsi, les poignées créées par $ (abonnez-vous) ne sont pas globaux. .

Je ne sais pas comment vous désabonner de ces widgets lorsque l'utilisateur décide de supprimer le widget de leur page personnalisée.

En outre, comment pourrais-je savoir de quel widget se désabonner?

+1

Avez-vous trouvé une bonne solution à cela? Nous aurons bientôt le même problème. Serait intéressant de voir comment vous l'avez résolu. – henriksen

Répondre

0

Ceci ne résout pas votre problème directement, mais il peut très bien vous aider. This is a recent blog par Sam Clearman. Il décrit un moyen de gérer publication/abonnement événements sans utiliser ce plugin:

événements jQuery personnalisés fournissent construit dans le moyen d'utiliser Publish modèle abonnez-vous d'une manière qui est fonctionnellement équivalent, et syntaxiquement très similaire, à Higgin de pub/sub plugin: Il suffit de lier les observateurs au document.

De cette façon, vous pourrez peut-être résoudre vos problèmes actuels.

+0

J'avais déjà vu cet article et je ne suis pas convaincu que ce soit la réponse. – Shawn

0

Je ne l'ai pas utilisé le plugin PubSub avant, mais je jeta un regard the source code et il semble que vous pouvez résilier votre abonnement exactement la même que celle que vous vous abonnez, à l'aide $.unsubscribe(...) plutôt que $.subscribe(...).

Est-ce quelque chose que vous savez déjà, et le problème est causé par votre nom de fichier widget? Je ne suis pas vraiment sûr de ce que vous entendez par espace de noms, de toute façon, car JavaScript ne supporte pas les véritables espaces de noms (juste des objets - ce que je suppose est ce que vous utilisez).