J'ai besoin d'une communication inter-composant dans une application web et je réfléchis à différentes façons d'y parvenir. J'ai quelques idées, mais j'accueillerais d'autres idées.Communication inter-composants en javascript
D'abord, un exemple simple et rapide. J'ai deux composants distincts sur une page qui sont chargés de manière asynchrone. Par composant, je veux dire un morceau de HTML auquel est associé un objet javascript qui inclut des comportements basés sur jquery sur les noeuds du html. Lorsqu'un utilisateur interagit avec un composant, les modifications doivent avoir lieu dans l'autre composant, et vice-versa.
La chose la plus importante à retenir ici est que chaque composant doit être une unité autonome. Il pourrait être réutilisé dans différentes parties d'une application, ou même dans différentes applications. Donc, il ne connaît pas l'existence des autres composants sur la page. Mes réflexions actuelles sur une solution impliquent que les composants écoutent les événements personnalisés qui les intéressent et qu'ils envoient des événements personnalisés lorsqu'une action a eu lieu. Par conséquent, chaque composant écoute les événements déclenchés par l'autre. Le problème est que, en raison du chargement asynchrone, un composant peut prendre plus de temps à charger que l'autre. Il est possible qu'un événement soit envoyé trop tôt et soit perdu. Dans certains cas, cela peut être correct, mais dans certains cas, je dois m'assurer que tous les événements envoyés par un composant sont consommés.
Alors, voici quelques questions connexes:
Qu'advient-il un événement après son déclenchement? Est-ce qu'il disparaît simplement s'il n'y a pas d'écouteurs au moment où il a été déclenché?
Existe-t-il un moyen de détecter si un déclencheur a même été consommé ou perdu?
Quels sont les bons moyens pour chaque composant à connaître les autres composants? Y a-t-il des projets javascript open-source existants ou des plugins jquery traitant de ce genre de choses?
En ce qui concerne la question n ° 3, je pense que chaque composant pourrait envoyer un événement de type registre qui inclut les types d'événements qu'il écoute et une liste des composants qu'il a enregistré avec. Les composants écouteraient ces événements de registre. Une sorte de logique d'enregistrement utilisant des minuteurs serait utilisée pour s'assurer que les bons composants sont enregistrés ensemble pendant le processus de chargement des composants. Une fois l'enregistrement terminé, les composants pourront envoyer leurs événements normaux.
C'est une bonne idée. Le bus de messages pourrait être au niveau de l'application et démarré lors du chargement de la page. Alors les composants envoient simplement des événements, le bus les attrape et les pousse aux abonnés appropriés ou les maintient jusqu'à ce qu'un abonné s'enregistre. Si la durée de vie d'un événement expire, il peut même informer le composant d'origine que l'événement a échoué. – Tauren