Tengo una necesidad de comunicación entre componentes en una aplicación web y estoy considerando diferentes maneras de lograr esto. Tengo algunas ideas, pero agradecería otras ideas.Comunicación entre componentes en javascript
Primero, un ejemplo rápido y simple. Tengo dos componentes separados en una página que se cargan de forma asíncrona. Por componente, me refiero a un fragmento de HTML que tiene un objeto javascript asociado que incluye comportamientos basados en jquery en los nodos en el html. Cuando un usuario interactúa con un componente, los cambios deben tener lugar en el otro componente, y viceversa.
La clave a recordar aquí es que cada componente debe ser una unidad autónoma. Podría ser reutilizado en diferentes partes de una aplicación, o incluso diferentes aplicaciones. Por lo tanto, no sabe acerca de la existencia de otros componentes en la página.
Mi idea actual sobre una solución consiste en hacer que los componentes escuchen los eventos personalizados que les interesan, así como enviar eventos personalizados cuando se ha producido una acción. Por lo tanto, cada componente escucha los eventos que se desencadenan por el otro.
El problema es que debido a la carga asincrónica, un componente puede tardar más en cargarse que el otro. Existe la posibilidad de que un evento se envíe demasiado pronto y se pierda. En algunas situaciones, esto podría estar bien, pero en algunos casos necesito asegurarme de que todos los eventos que envía un componente se consuman.
Así que aquí hay algunas preguntas relacionadas:
¿Qué ocurre con eventos una vez que se activa? ¿Simplemente desaparece si no hay oyentes en el momento en que se activó?
¿Hay alguna forma de detectar si se consumió o se perdió un generador activado?
¿Cuáles son algunas buenas maneras para que cada componente sepa sobre los otros componentes?
¿Existe algún proyecto javascript de código abierto o plugins jquery que se ocupen de este tipo de cosas?
En lo que respecta a la pregunta # 3, estoy pensando que cada componente podría enviar algún tipo de registro evento que incluye los tipos de eventos que se escucha y una lista de componentes que ha registrado con. Los componentes escucharían estos eventos de registro. Algún tipo de lógica de registro usando temporizadores se usaría para asegurar que los componentes correctos se registraran juntos durante el proceso de carga del componente. Una vez que se haya completado el registro, los componentes podrán enviar sus eventos normales.
Esa es una buena idea. El bus de mensajes podría estar en el nivel de aplicación y comenzar a cargar la página. Luego, los componentes simplemente envían eventos, el autobús los captura y los envía a los suscriptores apropiados o los retiene hasta que se registra un suscriptor. Si el tiempo de vida de un evento expira, incluso podría notificar al componente de envío original que el evento falló. – Tauren