Yii2:如何为脚本使用 Asset Bundle

Yii2: how to use Asset Bundle for scripts

我已经阅读了文档,但无法弄清楚如何做到这一点,例如我在视图文件夹 medicine-issue-entry 的文件 index.php 中有一个小脚本,例如:

<?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 中,我添加了 like

public $js = [

        'js/autorefresh.js'
    ];

并在 web folder 中创建了一个文件夹 js,并使用以下代码创建了一个新文件 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 将代码包含在文件中时,它工作正常。

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

使用 Yii2 的 基本 模板

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

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

将您的脚本添加到位于 /assets/AppAsset.php

的 AppAsset class 内的 $js 数组
<?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);

NOTE: Your don't set the namespace of the index.php file.