Yii2: как вызвать yiiActiveForm() вручную?

В yii2 Я положил весь свой код JS в 1 файл, используя yii2-assets-auto-compress плагин, в том числе jQuery lib. Загрузка этого файла async ускорить загрузку страницы. Но если на странице есть формы, yii добавляет yiiActiveForm() в конце </body>, Итак, ошибка jQuery is not defined,

Как справиться с этой проблемой? Во-первых, я могу позвонить yiiActiveForm() вручную из script.js, но как его отключить, автоматически загрузить в конце тела? Обычно это не удобно, потому что могут быть другие сценарии, которые добавляют код js. Может быть, кто-то знает, как добавить код JS с этим yii2-assets-auto-compress плагин?

<script src="/assets/js-compress/script.js?" async="async"></script>
<script type="text/javascript">
jQuery(document).ready(function () {
    jQuery('#w0').yiiActiveForm([],[]);
});
</script>
</body>

1 ответ

async загружает файл во время анализа HTML и приостанавливает выполнение HTML-анализатора после завершения загрузки.

  • Вы должны либо загрузить Jquery вне ваших сжатых скриптов внутри головы.
  • Или загрузите скрипт внутри <head> документа означает внутри файла макета либо с помощью тегов сценария

    <script type="text/javascript" src="/path/to/compressed.js" async="async"></script>

    или используя

    <?php $this->registerJsFile('/path/to/compressed.js',['aync'=>'aync'])?>

  • если вы используете AssetManager для загрузки файла скрипта

Затем загрузите это так

public $js = [
        ['js/compressed.js','async'=>'async','position' => yii\web\View::POS_HEAD],

    ];

Кроме того, вы должны настроить менеджер ресурсов так, чтобы он не загружал основной скрипт jquery, чтобы он не загружал jquery дважды.

'assetManager' => [
    'bundles' => [
          'yii\web\JqueryAsset' => [
              'sourcePath' => null, 
              'js'=>[]
           ],
     ],
 ],

HERE это хорошее чтение.

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