在Yii 2中加载jQuery等核心脚本

时间:2014-11-22 12:50:03

标签: php jquery yii yii2

我一直很难找到如何在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和其他核心文件?

2 个答案:

答案 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');

yii\web\View::registerCssFile()

答案 1 :(得分:2)

您可以像下载一样删除核心jQuery:

<强>配置/ web.php

'assetManager' => [
    'bundles' => [
        // you can override AssetBundle configs here       
         'yii\web\JqueryAsset' => [
            'sourcePath' => null,
            'js' => [] 
        ],        
    ],
],