2012-06-20 16 views
6

Tworzę widget dla aplikacji Yii. Główny widok układu rejestruje wszystkie typowe pliki skryptów, takie jak jQuery i jQueryUI. W moim widżecie chcę użyć wtyczki jQueryUI, która bazuje na już załadowanym jQueryUI.Zmiana kolejności zarejestrowanych plików skryptów w yii

Wiem, że mogę określić, gdzie na stronie znajduje się skrypt, ale wydaje się nieco trafiony i chybiony, aby po prostu uwzględnić go na "końcu" - co jeśli mam inny skrypt, który muszę załadować po tej wtyczce ? Jak mogę upewnić się, że są one ładowane we właściwej kolejności - czy ktoś ma jakieś pomysły?

+0

Możesz określić pozycję. Zobacz dokumentację dla [registerScript] (http://www.yiiframework.com/doc/api/1.1/CClientScript/#registerScript-detail) i/lub [registerScriptFile] (http://www.yiiframework.com/doc/ api/1.1/CClientScript/# registerScriptFile-detail) – adamors

+0

Dzięki za tę myśl, ale zdawałem sobie z tego sprawę. Możesz podać jedno z trzech miejsc - POS_BEGIN, POS_END i POS_READY - które nie pomogą, jeśli potrzebuję załadować wszystkie moje wtyczki do POS_BEGIN, ale niektóre pochodzą z głównego layoutu, a niektóre z widżetów. – Hippyjim

+0

Widzisz, czy próbowałeś przeglądać źródło widgetów zii? – adamors

Odpowiedz

11

Możesz użyć funkcji zależności w Yii script packages. Miałem similar problem before.

Na przykład masz pakiety skrypt config jak poniżej,

'clientScript' => array(
    'packages' => array(
    'package1' => array(
      'basePath' => 'path.to.package1', 
      'js' => array(
       'package1.js', 
     ), 
      'css' => array(
       'package1.css' 
     ), 
    ), 
    'package2' => array(
      'basePath' => 'path.to.package2', 
      'js' => array(
       'package2.js', 
     ), 
      'css' => array(
       'package2.css' 
     ), 
      'depends' => array(
       'package1', 
     ) 
    ), 
    'package3' => array(
      'basePath' => 'path.to.package3', 
      'js' => array(
       'package3.js', 
     ), 
      'css' => array(
       'package3.css' 
     ), 
      'depends' => array(
       'package2', 
     ) 
    ), 
    ) 
) 

W powyższym przykładzie, package2 wymaga (zależy) package1 i package3 wymaga package2. Załóżmy, że w twoim przypadku widżet używa package2, a drugi skrypt używa package3. Nawet jeśli nie wyrenderujesz widgetu, jeśli użyjesz Yii::app()->clientScript->registerPackage('package3');, automatycznie zainstaluje on package2, który następnie zainstaluje package1 przed package2 (lub nie będzie instalował, jeśli wcześniej wymagane było już package1).

+0

+1, wygląda dobrze, dlaczego o tym nie pomyślałem! –

+0

Świetne rzeczy, dzięki, Petra, dokładnie tego potrzebowałem. – Hippyjim

Powiązane problemy