找不到AssetBundle的JS文件(404错误) - Yii2

时间:2016-09-14 04:48:52

标签: javascript php yii

我创建了yii 1应用程序,并使用以下脚本在视图文件中导航:

$(function() {
    $('a[href*="#"]:not([href="#"])').click(function() {
        if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) {
            var target = $(this.hash);
            target = target.length ? target : $('[name=' + this.hash.slice(1) +']');
            if (target.length) {
                $('html, body').animate({
                    scrollTop: target.offset().top
                }, 1000);
                return false;
            }
        }
    });
});

但是,当我创建yii2应用程序并粘贴此代码时,它无法正常工作。然后,我创建了新的menu_navigate.js js文件并粘贴了像

这样的代码
$(function() {
        $('a[href*="#"]:not([href="#"])').click(function() {
            if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) {
                var target = $(this.hash);
                target = target.length ? target : $('[name=' + this.hash.slice(1) +']');
                if (target.length) {
                    $('html, body').animate({
                        scrollTop: target.offset().top
                    }, 1000);
                    return false;
                }
            }
        });
    });

我使用以下代码在ThemeAsset中注册了此代码:

 public $js = [
 'Index/menu_navigate.js'
]

但是,这段代码并没有帮助我,也没有用。我无法找到任何错误。 在控制台屏幕中显示以下错误消息
GET http://all/themes/CompanyProfile/Index/menu_navigate.js(未找到)

2 个答案:

答案 0 :(得分:0)

使用' /Index/menu_navigate.js' ;,这将帮助您获得正确的路径。

答案 1 :(得分:0)

如果此文件位于Web可访问目录之外,则需要在资产包中设置正确的sourcePath

<?php

namespace app\assets;

use yii\web\AssetBundle;

class MenuNavigationAsset extends AssetBundle 
{
    public $sourcePath = '@bower/font-awesome'; // Replace with folder where "Index" folder is located. Path should be absolute, you can use aliases here.
    public $js = [ 
        'Index/menu_navigate.js', 
    ];    
}

然后它将被复制到Web可访问目录并从那里加载。您可以使用官方文档来定义别名here。它可以防止您对绝对路径进行硬编码。

否则(如果文件位于Web可访问目录中),请设置basePathbaseUrl属性:

<?php

namespace app\assets;

use yii\web\AssetBundle;

class MenuNavigationAsset extends AssetBundle
{
    public $basePath = '@webroot';
    public $baseUrl = '@web';
    public $js = [
        'Index/menu_navigation.js',
    ];   
}

准确检查浏览器尝试加载此js文件的路径,并确保路径正确时存在文件,否则请修改资产包中的路径。

同时检查拼写错误的路径。

有关使用资产的官方文档here