Как добавить активы 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 загружается при загрузке страницы, а не при отображении виджета. Это вызывает следующие проблемы:

  1. API google-maps возвращает ошибку о том, что он был загружен несколько раз.
  2. События, связанные с элементами DOM в дочернем элементе, завершаются сбоем, так как элементы не находятся в DOM, пока форма не будет вызвана.

Обходной путь, который я использую, состоит в том, чтобы внедрить мой JS в парциальную форму formWidget.

Есть ли способ заставить метод addJS работать для formWidget, когда он является частью дочерней формы?

1 ответ

После некоторого исследования я понял, что мой formWidget, использующий метод addJs(), сделает JS виджета глобально доступным для всей страницы даже до того, как formWidget существовал или даже был необходим.

Хотя я мог бы создать сложный, причудливый JS, включающий слушателей для вставок DOM и бла-бла-бла, это не было идеальным (главным образом потому, что свойства виджета меняются в зависимости от реализации).

Самый быстрый / безопасный способ включить JS, который тесно связан со сложным виджетом formWidget, - включить его в частичное. Это гарантирует, что виджет формы будет работать правильно как в автономной форме, так и в ситуациях, когда виджет является частью дочерней формы, которая создается с помощью загрузки Ajax.

(Если вы знаете лучший способ, пожалуйста, дайте мне знать)

Другие вопросы по тегам