我一直很难找到如何在jQuery
中加载Yii 2
或其他CORE脚本。
在Yii 1
中,似乎就是这样:
<?php Yii::app()->clientScript->registerCoreScript("jquery"); ?>
在Yii 2中,$ app是Yii的一个属性,而不是一种方法,因此上述情况自然不起作用,但将其更改为:
<?php Yii::$app->clientScript->registerCoreScript("jquery"); ?>
产生此错误:
Getting unknown property: yii\web\Application::clientScript
我无法找到有关加载核心脚本的Yii 2的任何文档,所以我尝试了以下内容:
<?php $this->registerJsFile(Yii::$app->request->baseUrl . '/js/jquery.min.js', array('position' => $this::POS_HEAD), 'jquery'); ?>
虽然这会在头部加载jQuery,但是在需要时,Yii 还会加载第二个版本的jQuery,因此会导致冲突错误。
此外,我不想使用Yii的jQuery实现,我更愿意维护自己,因此这就是我这样做的原因。
如果没有Yii在需要时加载它们的副本,我如何加载jQuery和其他核心文件?
答案 0 :(得分:9)
要停用Yii2
的默认资源,您可以参考以下问题:
<强> Yii2 disable Bootstrap Js, JQuery and CSS 强>
无论如何,Yii2
的资产管理方式与Yii 1.x.x
不同。首先,您需要创建AssetBundle
。作为官方指南示例,在``:
namespace app\assets\YourAssetBundleName;
use yii\web\AssetBundle;
class YourAssetBundleName extends AssetBundle
{
public $basePath = '@webroot';
public $baseUrl = '@web';
public $css = [
'path/file.css',//or files
];
public $js=[
'path/file.js' //or files
];
//if this asset depends on other assets you may populate below array
public $depends = [
];
}
然后,将它们发布在您的观点上:
use app\assets\YourAssetBundleName;
YourAssetBundleName::register($this);
哪个$this
引用当前视图对象。
另一方面,如果您只需要将JS
个文件注册到视图中,您可以使用:
$this->registerJsFile('path/to/file.js');
yii\web\View::registerJsFile()
如果您只需要将CSS
个文件注册到视图中,您可以使用:
$this->registerCssFile('path/to/file.css');
答案 1 :(得分:2)
您可以像下载一样删除核心jQuery:
<强>配置/ web.php 强>
'assetManager' => [
'bundles' => [
// you can override AssetBundle configs here
'yii\web\JqueryAsset' => [
'sourcePath' => null,
'js' => []
],
],
],