Yii2:如何将Asset Bundle用于脚本

时间:2015-01-21 19:15:11

标签: yii2

我已阅读文档,但无法知道如何执行此操作,例如我在视图文件夹index.php中的文件medicine-issue-entry中有一个小脚本,如:

<?php
$js = 'function refresh() {
     $.pjax.reload({container:"#medicine_request_entry"});
     setTimeout(refresh, 60000); // restart the function every 5 seconds
 }
 refresh();';
 $this->registerJs($js, $this::POS_READY);
?>

我可以将此代码放在单独的文件中,以及如何将其包含在相关文件中。 我们将非常感谢详细的流程。 感谢。

好的我正在使用基本模板。 在AppAsset.php我已经包括了

public $js = [

        'js/autorefresh.js'
    ];

并在js中创建了一个文件夹web folder,并使用以下代码创建了一个新文件autorefresh.js:

function refresh() {
         $.pjax.reload({container:"#medicine_request_entry"});
         setTimeout(refresh, 60000); // restart the function every 5 seconds
     }
     refresh();

并在我的index.php我添加了一行

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

但同样不起作用,我还缺少什么吗?正如我在registerJs文件中包含代码一样,它工作正常。

注意:在查看页面源文件时,文件已正确发布,并单击显示脚本的链接,但代码无效。

1 个答案:

答案 0 :(得分:4)

使用Yii2的基本模板

autorefresh.js脚本添加到/web/js/目录

function refresh() {
    $.pjax.reload({container:"#medicine_request_entry"});
    setTimeout(refresh, 60000); // restart the function every 5 seconds
}
refresh();

将您的脚本添加到位于$js的AppAsset类中的/assets/AppAsset.php数组

<?php
namespace app\assets;
use yii\web\AssetBundle;

class AppAsset extends AssetBundle
{
    public $basePath = '@webroot';
    public $baseUrl = '@web';
    public $css = [
         'css/site.css',
    ];
    public $js = [
        'js/autorefresh.js',
    ];
    public $depends = [
        'yii\web\YiiAsset',
        'yii\bootstrap\BootstrapAsset',
    ];
}

确保您的AssetBundle已注册。

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

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

注意:您没有设置index.php文件的命名空间。