Определение приоритета при выполнении обработчиков DOMContentLoaded
Приветствую!
Есть несколько элементов разметки (скажем элементы АБВ), ссылки на которые используются в нескольких модулях JS. Сейчас каждый раз для использования одного из этих элементов разметки в каком-либо модуле сначала выполняется поиск этого элемента и получение ссылки на него. Полагаю более целесообразно организовать отдельный модуль JS (скажем модуль Б) для элементов АБВ, из которого брать ссылки на эти элементы. Ссылки на соответствующие элементы разметки получать при выполнении события DOMContentLoaded. Вопрос в том, что есть модули JS, которые также участвуют в обработке события DOMContentLoaded и при этом используют ссылки на элементы АБВ. Может получится так, что обработчик события DOMContentLoaded модуля Б еще не будет выполнен и ссылки на АБВ еще не получены, но уже востребованы в прочих модулях. Как определить приоритет выполнения обработки события DOMContentLoaded в модуле Б по сравнению с прочими модулями? |
Грузить его первым без асинхрона, кек.
Какой обработчик первым зарегистрирован тот первым и отработает. |
То есть ставить модуль Б первым js файлом на странице.
А более академичный вариант есть? |
Академично поставить его первым при сборке.)
Нет, серьёзно: модули на то и модули, что автономны. Если им надо ждать какой-то один - значит придётся ждать. Приоритет обработчиков событий определяется очерёдностью их установки и более никак.(и то спасибо развитию и стандартизации, когда-то это вообще рандом был) Если очень хочется сделать пафосно, то можно в главном модуле налепить ленивых геттеров на нужные элементы, чтоб элемент получали с первым обращением. Примерно так: ... get topElement(){ delete this.topElement; return this.topElement = this.container.querySelector('.top-element') }, ... |
Часовой пояс GMT +3, время: 09:01. |