2016-01-19 19 views
6

Ho una vista in cui ho bisogno di chiamare JQuery nella mia intestazione insieme ad un'altra libreria JS. Per tutte le altre pagine possono essere visualizzate alla fine del documento. Qual è il modo migliore per ottenere questo in Yii2?AppAssets condizionali

Attualmente sto solo facendo questo nel mio AppAsset.php

public $js = [ 
    'https://code.highcharts.com/highcharts.js', 
]; 
public $jsOptions = ['position' => \yii\web\View::POS_HEAD]; 

Ho guardato facendo una new Asset, ma non ha sembra funzionare e non ero sicuro se fosse la strada giusta per andare su di esso. Come non voglio rendere il JS prima in ogni pagina.

<?php 

namespace app\assets; 

use yii\web\AssetBundle; 

class EarlyJavaScriptAsset extends AssetBundle 
{ 
public $js = [ 
'https://code.highcharts.com/highcharts.js', 
]; 
public $jsOptions = ['position' => \yii\web\View::POS_HEAD]; 

public $publishOptions = [ 
    'only' => [ 
     'report/report-1', // this is view folder location 
    ] 
]; 
} 

risposta

1

Se volete guardare AssetBundle::register() si vedrebbe che usa View::registerAssetBundle() senza secondo parametro. Ma questo secondo parametro è la cosa che ti serve:

@param intero | null $ posizione se impostato, forza una posizione minima per i file javascript. Questo regolerà le risorse in base alla posizione del file javascript o fallirà se non è possibile soddisfare il requisito . Se questo è nullo, le impostazioni delle posizioni delle paniere delle risorse non verranno modificate. Vedi registerJsFile per maggiori dettagli sulla posizione javascript .

Secondo lei, dove si registra il pacchetto di asset, cambiare

EarlyJavaScriptAsset::register($this); 

a

$this->registerAssetBundle(EarlyJavaScriptAsset::className(), $this::POS_HEAD); 

e

$this->registerAssetBundle(EarlyJavaScriptAsset::className(), $this::POS_END); 

a seconda vista

PS: Ovviamente $this è il contesto del tuo View.

+0

Una risposta meravigliosa - Grazie – Jonnny