Yii2:注册资产包与注册外部Js文件

时间:2015-01-25 18:55:10

标签: javascript php jquery yii2

您好我想知道按照文档中描述的流程注册Asset Bundle的优势 处理一个 在AppAsset.php中

public $js = [
        'js/myjsfile.js'
    ];

然后在视图文件中 添加名称空间,如

namespace app\assets;

然后添加使用语句,如

use app\assets\AppAsset;
AppAsset::register($this);

如果我使用的话,而不是做这一切 处理二

$this->registerJs('js/myjsfile.js', $this::POS_READY);

它工作正常。 那么我为什么要使用 Process One

  1. 非常感谢任何优势和理由。
  2. 如果我按照进程我是否需要添加所有js文件     单独AppAsset.php。
  3. 感谢。

3 个答案:

答案 0 :(得分:10)

Asset Bundles比正常注册有一些优势。除了@deacs在他/她的答案中所说的还有其他人:

  1. 如果文件不在Web可访问目录中
  2. ,则资产包可以将文件发布到资产
  3. Assets Bundle可以处理较少的文件(如果是CSS)以及压缩资产。
  4. 使代码优雅,特别是在解决依赖性和可重用性方面
  5. docs

    中包含了使光束发光的所有功能

答案 1 :(得分:8)

使用资产包的主要原因之一是您的资产'路径永远是正确的。考虑:

$this->registerJsFile('js/myjsfile.js', ['position'=>$this::POS_READY]);

将生成如下内容:

<script src="js/myjsfile.js"></script>

适用于未启用urlManager的网址,例如http://localhost/yiiproject/index.php?r=user/update&id=8,因为您的浏览器会在/yiiproject/js/myjsfile.js

中查找js文件

但是如果您启用了urlManager,您的网址将显示为http://localhost/yiiproject/user/update/8,这意味着您的浏览器会在/yiiproject/user/update/8/js/myjsfile.js查找您的js文件。

您可以使用以下方法解决此问题:

$this->registerJsFile(Yii::$app->request->baseUrl.'/js/myjsfile.js', ['position'=>$this::POS_READY]);

但是Asset Bundle基本上可以帮到你。

答案 2 :(得分:0)

使用资产套装,您还可以从“供应商”获取最新版本。文件夹,所以如果你需要更新一些lib,你不需要手动执行此操作,因为composer已经这样做了。