Yii2:如何使用Asset Bundle编写脚本

Paw*_*wan 3 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);
?>
Run Code Online (Sandbox Code Playgroud)

在哪里可以将此代码放在单独的文件中,以及如何在相关文件中包括该代码。详细的过程将不胜感激。谢谢。

好的,我正在使用基本模板。在AppAsset.php我包括像

public $js = [

        'js/autorefresh.js'
    ];
Run Code Online (Sandbox Code Playgroud)

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

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

在我中index.php我添加了一行

namespace app\assets;
use app\assets\AppAsset;
AppAsset::register($this);
Run Code Online (Sandbox Code Playgroud)

但是,这同样行不通,我还缺少什么吗?当我在文件中包含代码时,registerJs它工作正常。

注意:在查看页面源文件时,文件已正确发布,然后单击链接显示脚本,但代码不起作用。

pjh*_*gel 5

使用Yii2 基本模板

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

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

将脚本添加到$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',
    ];
}
Run Code Online (Sandbox Code Playgroud)

确保您的AssetBundle已注册。

use app\assets\AppAsset;
AppAsset::register($this);
Run Code Online (Sandbox Code Playgroud)

要么

\app\assets\AppAsset::register($this);
Run Code Online (Sandbox Code Playgroud)

注意:不要设置index.php文件的名称空间。