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
это хорошее чтение.