2016-09-14 3 views
0

I erstellt yii 1 Anwendung und verwendet folgende Skript, um im Hinblick auf Datei zu navigieren:JS-Datei von AssetBundle nicht gefunden (Fehler 404) - Yii2

$(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; 
      } 
     } 
    }); 
}); 

Aber, wenn ich yii2 Anwendung erstellt und diesen Code eingefügt , Es hat nicht funktioniert. Dann habe ich erstellt neue menu_navigate.js js Datei und Einfügen Code wie

$(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; 
       } 
      } 
     }); 
    }); 

i registriert diesen Code in ThemeAsset folgenden Code:

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

Aber dieser Code half mir nicht, und es ist nicht Arbeiten. Ich konnte keinen Fehler finden. In Konsolenbildschirm wird es zeigt folgende Fehlermeldung
GET http://all/themes/CompanyProfile/Index/menu_navigate.js (nicht gefunden)

+0

add public $ jsOptions = ['position' => \ yii \ web \ Ansicht :: POS_HEAD]; – phpdev

Antwort

0

Use ‚/Index/menu_navigate.js‘, die Sie richtigen Pfad erhalten helfen.

+0

Hier funktionieren andere js-Dateien ordnungsgemäß. Diese funktionierenden js-Dateien verwenden den Pfad 'index/___. Js' und sie funktionieren ordnungsgemäß. Aber, js Dateien, die ich erstellte, funktionieren nicht – phpdev

+0

Haben Sie jquery.min.js in "ThemeAsset" eingeschlossen. Da der Code, den Sie geschrieben haben, jquery verwendet, sollte er erst nach der Erstellung von DOM funktionieren. Und wenn es immer noch nicht aufgelöst ist, versuchen Sie die registerScript-Funktion direkt in der Ansicht zu verwenden. Siehe: http://stackoverflow.com/questions/28781463/yii2-include-js-script-only-for-specific-view – Mahi

+0

Führender Schrägstrich in JS- und CSS-Dateinamen in Asset-Bundles ist nicht erforderlich. – arogachev

0

Wenn diese Datei außerhalb von Web zugänglich Verzeichnis, müssen Sie richtig sourcePath im Asset-Bundle setzen:

<?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', 
    ];  
} 

Dann wird es auf dem Web zugängliches Verzeichnis und von dort geladen kopiert werden. Sie können offizielle Dokumente für die Definition von Aliasen erstellen here. Es verhindert, dass Sie absolute Pfade hart codieren.

Andernfalls (wenn die Datei im Internet zugängliches Verzeichnis ist), setzte basePath und baseUrl Eigenschaften:

<?php 

namespace app\assets; 

use yii\web\AssetBundle; 

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

prüft genau, dass der Pfad, von dem Browser versucht, diese Datei js zu laden und sicher Datei gibt es zu machen, wenn Pfad ist der korrekte, ansonsten korrekte Pfad in Ihrem Asset-Paket.

Überprüfen Sie den Pfad auch auf Tippfehler.

Offizielle Dokumente zum Arbeiten mit Assets sind verfügbar here.