Ho bisogno di comunicazione inter-componente in un'applicazione web e sto prendendo in considerazione diversi modi per farlo. Ho alcune idee, ma vorrei dare il benvenuto ad altre idee.Comunicazione inter-componente in javascript
In primo luogo, un esempio semplice e veloce. Ho due componenti separati su una pagina che vengono caricati in modo asincrono. Per componente, intendo una porzione di codice HTML a cui è associato un oggetto javascript che include comportamenti basati su jQuery sui nodi nell'html. Quando un utente interagisce con un componente, le modifiche devono aver luogo nell'altro componente e viceversa.
La cosa fondamentale da ricordare qui è che ogni componente deve essere un'unità autonoma. Potrebbe essere riutilizzato in diverse parti di un'applicazione o anche in applicazioni diverse. Quindi non sa dell'esistenza degli altri componenti nella pagina.
Le mie attuali riflessioni su una soluzione implicano l'ascolto di componenti per gli eventi personalizzati a cui sono interessati nonché l'invio di eventi personalizzati quando un'azione è stata eseguita. Pertanto, ogni componente ascolta gli eventi che sono attivati dall'altro.
Il problema è che a causa del caricamento asincrono, un componente potrebbe impiegare più tempo a caricarsi rispetto all'altro. Esiste la possibilità che un evento venga inviato troppo presto e venga perso. In alcune situazioni questo potrebbe andar bene, ma in alcuni casi ho bisogno di assicurarmi che tutti gli eventi inviati da un componente vengano consumati.
Quindi, ecco alcune domande correlate:
Cosa succede a un evento dopo che è stato attivato? Scompare se non ci sono ascoltatori al momento in cui è stato attivato?
C'è un modo per rilevare se un triggerato è stato consumato o perso?
Quali sono alcuni buoni modi per ciascun componente per conoscere gli altri componenti?
Esistono progetti javascript open source o plug-in jQuery che gestiscono questo tipo di cose?
Riguardo alla domanda 3 #, sto pensando che ogni componente potrebbe inviare una sorta di registro evento che include i tipi di eventi che ascolta e un elenco dei componenti che ha registrato con. I componenti dovrebbero ascoltare questi eventi registrati. Verrebbe utilizzata una sorta di logica di registrazione che utilizza i timer per assicurarsi che i componenti giusti vengano registrati insieme durante il processo di caricamento dei componenti. Una volta completata la registrazione, i componenti saranno in grado di inviare i loro eventi normali.
Questa è una buona idea. Il bus messaggi potrebbe essere a livello di applicazione e avviato al caricamento della pagina. Quindi i componenti inviano semplicemente gli eventi, il bus li intercetta e li spinge agli abbonati appropriati o li tiene fino a quando un utente non si registra. Se il time-to-live di un evento scade, potrebbe anche notificare al componente di invio originale che l'evento è fallito. – Tauren