2015-01-25 8 views
10

Salve volevo sapere il vantaggio di registrare Asset Bundle seguendo il processo descritto nella documentazione come Processo uno in AppAsset.phpYii2: Registrazione di Asset Bundle vs la registrazione di file Js esterno

public $js = [ 
     'js/myjsfile.js' 
    ]; 

poi nel file di visualizzazione l'aggiunta dello spazio dei nomi come

namespace app\assets; 

e quindi aggiungendo la dichiarazione uso come

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

Invece di fare tutto questo se uso Processo Due

$this->registerJs('js/myjsfile.js', $this::POS_READY); 

funziona benissimo. Quindi, perché dovrei usare Process One.

  1. Qualsiasi vantaggio e motivo per questo sarà molto apprezzato.
  2. Se seguo il processo uno Devo aggiungere tutti i file js in AppAsset.php singolarmente.

Grazie.

risposta

8

Uno dei motivi principali per l'utilizzo di un pacchetto di asset è che i percorsi delle risorse saranno sempre corretti. Considerare:

$this->registerJsFile('js/myjsfile.js', ['position'=>$this::POS_READY]); 

genererà qualcosa come:

<script src="js/myjsfile.js"></script> 

che funziona alla grande per gli URL abilitati urlManager non, ad esempio, http://localhost/yiiproject/index.php?r=user/update&id=8 perché il browser cerca il file js a: /yiiproject/js/myjsfile.js

Ma se si abilita urlManager, l'URL sarà simile http://localhost/yiiproject/user/update/8, il che significa che il browser cercherà il file js a: /yiiproject/user/update/8/js/myjsfile.js.

Si potrebbe ovviare a questo problema utilizzando:

$this->registerJsFile(Yii::$app->request->baseUrl.'/js/myjsfile.js', ['position'=>$this::POS_READY]); 

Ma l'Asset Bundle fa fondamentalmente per voi.

+0

Hi Deacs - Questo spiega perché utilizzare AssetBundle. puoi anche dirmi se ho bisogno di includere tutti i file js individualmente in AppAsset.php. – Pawan

+0

Ho la stessa domanda. Se ho più viste e ogni vista ha il proprio css/js, significa che devo creare un pacchetto di risorse per ognuna di esse? –

+0

@Jerry yeah Vorrei creare un AssetBundle per ogni pacchetto di file separati css e js. Nella maggior parte dei casi, tuttavia, più di 1 vista utilizzerà le stesse risorse in modo da poter riutilizzare AssetBundle. – deacs

10

I pacchetti di asset presentano alcuni vantaggi rispetto alla normale registrazione. A parte quanto @deacs ha detto nel suo/la sua risposta qui sono altri:

  1. Attivo bundle può pubblicare il file a fronte di attività se non in directory web accessibile
  2. Assets bundle può fare con meno file (in caso di CSS) oltre a comprimere le risorse.
  3. rende il codice elegante soprattutto nella risoluzione di dipendenze e di conseguenza riusabilità

Tutte le caratteristiche che rendono fasci brillantezza si trovano in docs

+0

ottimo completamento della risposta accettata. +1 – deacs

+0

grazie per il complemento :) –

0

Utilizzando Asset Bundles, è anche possibile ottenere la versione più recente dalla cartella 'fornitore' , quindi se hai bisogno di aggiornare qualche lib non hai bisogno di farlo manualmente poiché il compositore lo fa già.

Problemi correlati