Как добавить активы JS в виджет BackEnd form в дочерней форме в OctoberCMS?
Я не уверен, правильно ли я добавляю свои ресурсы JS, и хотел бы получить совет, если я не так.
В октябре CMS я создал собственный виджет formWidget, который использует Google Maps API.
Я использую свой formWidget внутри дочерней формы, которая визуализируется через AJaX в качестве модальной при необходимости.
Если я использую следующий код в своем классе виджетов:
public function loadAssets(){
$this->addJs("http://maps.googleapis.com/maps/api/js?key=myappkeyhere&libraries=places");
$this->addJs('js/geocomplete/jquery.geocomplete.min.js');
$this->addJs('js/addressinput.js');
$this->addCss('css/addressinput.css');
}
JS загружается при загрузке страницы, а не при отображении виджета. Это вызывает следующие проблемы:
- API google-maps возвращает ошибку о том, что он был загружен несколько раз.
- События, связанные с элементами DOM в дочернем элементе, завершаются сбоем, так как элементы не находятся в DOM, пока форма не будет вызвана.
Обходной путь, который я использую, состоит в том, чтобы внедрить мой JS в парциальную форму formWidget.
Есть ли способ заставить метод addJS работать для formWidget, когда он является частью дочерней формы?
1 ответ
После некоторого исследования я понял, что мой formWidget, использующий метод addJs(), сделает JS виджета глобально доступным для всей страницы даже до того, как formWidget существовал или даже был необходим.
Хотя я мог бы создать сложный, причудливый JS, включающий слушателей для вставок DOM и бла-бла-бла, это не было идеальным (главным образом потому, что свойства виджета меняются в зависимости от реализации).
Самый быстрый / безопасный способ включить JS, который тесно связан со сложным виджетом formWidget, - включить его в частичное. Это гарантирует, что виджет формы будет работать правильно как в автономной форме, так и в ситуациях, когда виджет является частью дочерней формы, которая создается с помощью загрузки Ajax.
(Если вы знаете лучший способ, пожалуйста, дайте мне знать)