2014-11-22 3 views
6

Ich habe es schwer, herauszufinden, wie jQuery oder andere CORE-Skripte in Yii 2 geladen werden.Laden von Core-Skripten wie jQuery in Yii 2

In Yii 1 es schien dies der richtige Weg war:

<?php Yii::app()->clientScript->registerCoreScript("jquery"); ?> 

In Yü 2, $ app ist eine Eigenschaft von Yü, kein Verfahren, so dass die oben natürlich nicht funktioniert, aber es verändert sich:

<?php Yii::$app->clientScript->registerCoreScript("jquery"); ?> 

erzeugt diesen Fehler:

Getting unknown property: yii\web\Application::clientScript 

ich keine Unterlagen für Yü 2 über lo finden konnten, Kern Skripte ading, so habe ich versucht, die folgenden:

<?php $this->registerJsFile(Yii::$app->request->baseUrl . '/js/jquery.min.js', array('position' => $this::POS_HEAD), 'jquery'); ?> 

Während dies lädt jQuery im Kopf, ist eine zweite Version von jQuery auch von Yü geladen wenn benötigt und somit verursacht Fehler Konflikt.

Darüber hinaus möchte ich Yi's Implementierung von jQuery nicht verwenden, würde ich lieber meine eigenen beibehalten und daher ist das, warum ich das tue.

Wie kann ich jQuery und andere Kerndateien laden, ohne dass Yii doppelte Kopien von ihnen lädt, wenn sie benötigt werden?

+0

finden Sie http://StackOverflow.com/Questions/26734385/YII2-disable-bootstrap-Js-Jquery-and-Css/26734892#26734892 und http://www.Yiiframework.com/doc- 2.0/guide-structure-assets.html nützlich. –

Antwort

9

Um Yii2 ‚s Standard-Assets deaktivieren Sie auf diese Frage beziehen:

Yii2 disable Bootstrap Js, JQuery and CSS

Wie auch immer, Yii2 's Asset Management Weg unterscheidet sich von Yii 1.x.x. Zuerst müssen Sie eine AssetBundle erstellen.

namespace app\assets\YourAssetBundleName; 
use yii\web\AssetBundle; 

class YourAssetBundleName extends AssetBundle 
{ 
public $basePath = '@webroot'; 
public $baseUrl = '@web'; 
public $css = [ 
    'path/file.css',//or files 
]; 
public $js=[ 
    'path/file.js' //or files 
]; 

//if this asset depends on other assets you may populate below array 
public $depends = [ 
]; 
} 

Dann sie auf Ihre Ansichten zu veröffentlichen: Als offizieller Leitfaden Beispiel ein Asset Bündel wie unten in `` erstellen

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

Welche $this bezieht sich auf aktuelle Ansicht Objekt.


Auf der anderen Seite, wenn Sie nur brauchen, um JS Dateien in eine Ansicht zu registrieren, können Sie verwenden:

$this->registerJsFile('path/to/file.js'); 

yii\web\View::registerJsFile()

Und wenn Sie nur CSS Dateien müssen sich registrieren, in eine Ansicht, die Sie verwenden können:

$this->registerCssFile('path/to/file.css'); 

yii\web\View::registerCssFile()

2

Sie können den Kern jQuery geladen wird, wie so entfernen:

config/web.php

'assetManager' => [ 
    'bundles' => [ 
     // you can override AssetBundle configs here  
     'yii\web\JqueryAsset' => [ 
      'sourcePath' => null, 
      'js' => [] 
     ],   
    ], 
], 
+2

Ist das der einzige Weg, es zu tun? Keine Ähnlichkeit mit Yii 1? – Brett