在我的视图中添加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>
Run Code Online (Sandbox Code Playgroud)
我需要让这个简单的脚本在页面加载后显示警告.我没有在这里调用任何脚本文件,因为yii通过调用自动加载(我认为)在布局中
AppAsset::register($this);
Run Code Online (Sandbox Code Playgroud)
这导致脚本文件在我的自定义脚本之后在页面末尾注册.
怎么解决这个?
ipp*_*ppi 81
Yii2最后在你的页面上注入脚本(jquery等).这是有意的.但这意味着jQuery将在脚本之后加载,所以当你的脚本运行时,jQuery还不存在.
快速测试的最简单方法是将yii-scripts(jquery等)移动到页面的头部.修改assets\AppAsset.php并添加:
public $jsOptions = array(
'position' => \yii\web\View::POS_HEAD
);
Run Code Online (Sandbox Code Playgroud)
完成!
但是在生产中你通常希望脚本最后加载,而你让Yii2处理你的javascript:
$this->registerJs(
'$("document").ready(function(){ alert("hi"); });'
);
Run Code Online (Sandbox Code Playgroud)
现在Yii将处理这个js并将它放在任何重要的东西之后(比如jQuery).
然而,您很快就会注意到IDE通常不善于处理这种语言嵌套(PHP中的JavaScript),因此语法突出显示可能会破坏.解决此问题的一种方法是在单独的文件中注册脚本:
$this->registerJsFile( 'myScript.js' );
Run Code Online (Sandbox Code Playgroud)
如果您想要更多地控制加载脚本的顺序,可以将依赖项添加为第二个参数,将其他选项添加为第三个参数:
$this->registerJsFile(
'myScript.js',
['\backend\assets\AppAsset'],
['position' => '\yii\web\View::POS_END']
);
Run Code Online (Sandbox Code Playgroud)
如果您出于某种原因绝对希望脚本以内联方式呈现,您可以执行以下操作:
$this->registerJs( $this->renderPartial('myScript.js') );
Run Code Online (Sandbox Code Playgroud)
添加脚本的推荐方法是使用AssetBundles.查看assets/AppAssets.php并将您的js文件添加到$ js-array.
| 归档时间: |
|
| 查看次数: |
28196 次 |
| 最近记录: |