Мне нужна межкомпонентная связь в веб-приложении, и я рассматриваю различные способы сделать это. У меня есть некоторые идеи, но я бы приветствовал другие идеи.
Во-первых, быстрый и простой пример. У меня есть два отдельных компонента на странице, которые загружаются асинхронно. Под компонентом я подразумеваю кусок HTML, с которым связан объект javascript, который включает поведения на основе jquery для узлов в html. Когда пользователь взаимодействует с одним компонентом, изменения должны происходить в другом компоненте, и наоборот.
Ключевым моментом, который следует помнить здесь, является то, что каждый компонент должен быть автономным блоком. Он может быть повторно использован в разных частях приложения или даже в разных приложениях. Так что он не знает о существовании других компонентов на странице.
В настоящее время мои мысли о решении связаны с тем, чтобы компоненты прослушивали интересующие их пользовательские события, а также отправляли пользовательские события при выполнении действия. Поэтому каждый компонент прослушивает события, которые запускаются другим.
Проблема в том, что из-за асинхронной загрузки один компонент может загружаться дольше, чем другой. Существует вероятность того, что событие может быть отправлено слишком рано и потеряно. В некоторых ситуациях это может быть хорошо, но в некоторых случаях мне нужно убедиться, что все события, отправляемые компонентом, потребляются.
Итак, вот несколько связанных вопросов:
Что происходит с событием после его запуска? Он просто исчезает, если на момент запуска не было слушателей?
Есть ли способ определить, был ли сработавший чёт даже уничтожен или потерян?
Какие есть хорошие способы для каждого компонента узнать о других компонентах ?
Существуют ли какие-либо проекты с открытым исходным кодом javascript или плагины jquery, которые имеют дело с этими типами вещей?
Что касается вопроса № 3, я думаю, что каждый компонент может отправить какое-то событие register , которое включает типы прослушиваемых им событий и список компонентов, которые он зарегистрировал с. Компоненты будут прослушивать эти события регистра. Некоторая логика регистрации, использующая таймеры, будет использоваться для того, чтобы убедиться, что нужные компоненты регистрируются вместе в процессе загрузки компонента. После завершения регистрации компоненты смогут отправлять свои обычные события.