Yii2 最后在页面上注入脚本(jquery 等)。这是有意且期望的。但这意味着 jQuery 将在您的脚本之后加载,因此当您的脚本运行时,jQuery 还不存在。
快速测试最简单的方法是将 yii-scripts(jquery 等)移动到页面的头部。调整assets\AppAsset.php
并添加以下内容:
public $jsOptions = array(
'position' => \yii\web\View::POS_HEAD
);
Done!
但在生产中,您通常希望脚本最后加载,而是让 Yii2 处理您的 javascript:
$this->registerJs(
'$("document").ready(function(){ alert("hi"); });'
);
现在 Yii 将处理这个 js 并将其放置在任何重要的内容之后(例如 jQuery)。
然而,您很快就会注意到 IDE 通常不擅长处理这种语言嵌套(PHP 中的 JavaScript),因此语法突出显示可能会被破坏。解决此问题的一种方法是将脚本注册在单独的文件中:
$this->registerJsFile( 'myScript.js' );
如果您想要更多地控制加载脚本的顺序,您可以添加依赖项作为第二个参数,并将其他选项添加为第三个参数:
$this->registerJsFile(
'myScript.js',
['\backend\assets\AppAsset'],
['position' => '\yii\web\View::POS_END']
);
如果您出于某种原因绝对希望脚本内联呈现,您可以这样做:
$this->registerJs( $this->renderPartial('myScript.js') );
添加脚本的推荐方法是使用资源包 https://github.com/yiisoft/yii2/blob/master/docs/guide/assets.md。
在看assets/AppAssets.php
并将您的 js 文件添加到 $js 数组中。