ReferenceError: $ не определен yii2

Добавление javascript внутри моих результатов просмотра в ReferenceError: $ is not defined . Я предполагаю, что проблема связана с тем, что Yii2 вставляет сценарии на мою страницу. Как это исправить?

Или как я могу запретить Yii2 автоматически загружать файлы сценариев?

Мой взгляд

  <?php use yii\helpers\Html; use yii\helpers\ArrayHelper; use yii\helpers\UrlManager; use yii\widgets\ActiveForm; use backend\controllers\StandardController; use backend\models\standard; ?> <div class="domain-form"> <?php $form = ActiveForm::begin(); ?> <?php <?= $form->field($model, 'clause')->textarea(['rows' => 6]) ?> <?= $form->field($model, 'name')->textarea(['rows' => 6]) ?> <div class="form-group"> <?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> </div> <?php ActiveForm::end(); ?> </div> <script type="text/javascript"> $("document").ready( function () { alert("hi"); });</script> 

Мне нужно, чтобы этот простой скрипт отображал предупреждение после загрузки страницы. Я hav'nt называл любой файл сценария здесь, так как yii загружается автоматически (я думаю) в макете, вызывая

  AppAsset::register($this); 

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

Как это решить?

Yii2 запускает скрипты (jquery и т. П.) На вашей странице. Это необходимо и желательно. Но это означает, что jQuery будет загружать ПОСЛЕ вашего скрипта, поэтому, когда ваш скрипт запускается, jQuery еще не существует.

Самый простой способ быстрого тестирования – переместить yii-скрипты (jquery и т. П.) В начало страницы. Измените assets\AppAsset.php и добавьте следующее:

 public $jsOptions = array( 'position' => \yii\web\View::POS_HEAD ); 

Готово!


Но в производстве вы обычно хотите, чтобы скрипты загружались последним, и вместо этого вы позволяете Yii2 обрабатывать ваш javascript:

 $this->registerJs( '$("document").ready(function(){ alert("hi"); });' ); 

Теперь Yii обработает этот js и поместит его после чего-то важного (например, jQuery).

Тем не менее, вы скоро заметите, что IDE обычно плохо справляются с этим вложением языка (JavaScript внутри PHP), поэтому подсветка синтаксиса может сломаться. Один из способов его решения – зарегистрировать свой скрипт в отдельном файле:

 $this->registerJsFile( 'myScript.js' ); 

Если вы хотите еще больше контролировать, какой заказ загружать ваши скрипты, вы можете добавить зависимости в качестве второго аргумента, а дополнительные параметры – как третий:

 $this->registerJsFile( 'myScript.js', ['\backend\assets\AppAsset'], ['position' => '\yii\web\View::POS_END'] ); 

Если вы по какой-то причине абсолютно хотите, чтобы скрипт был визуализирован, вы можете сделать следующее:

 $this->registerJs( $this->renderPartial('myScript.js') ); 

Рекомендуемым способом добавления ваших скриптов является использование AssetBundles . Просмотрите assets/AppAssets.php и добавьте js-файл в $ js-массив.

Всякий раз, когда вам понадобятся некоторые активы для конкретного использования библиотеки, зарегистрируйте их в файле вида следующим образом:

 use yii\web\JqueryAsset; JqueryAsset::register(this); 

В качестве альтернативы, если вы добавите yii\web\JqueryAsset в свой атрибут $depends внутри AppAsset , актив будет загружен автоматически для всех ваших просмотров, учитывая, что вы зарегистрировали его в основном макете (по умолчанию в шаблоне Yii2).

Я хотел использовать yii2-date-range от kartik-v в своем проекте и сделал следующее:

 use kartik\daterange\DateRangePicker; use kartik\daterange\MomentAsset; use yii\web\JqueryAsset; JqueryAsset::register(this); MomentAsset::register(this); ... echo DateRangePicker::widget([ 'model' => $model, ... ]); 

Поскольку я переключился на шаблоны twig, на мой взгляд, на мой взгляд:

 {{ use('kartik/daterange/DateRangePicker') }} {{ use('kartik/daterange/MomentAsset') }} {{ use('yii/web/JqueryAsset') }} {{ register_jquery_asset() }} {{ register_moment_asset() }} ... {{ date_range_picker_widget({ 'model': model, ... }) }}