2012-06-20 68 views
6

我正在爲Yii應用程序創建一個小部件。主佈局視圖註冊了所有通用腳本文件,例如jQuery和jQueryUI。在我的小部件中,我想使用一個jQueryUI插件,它依賴於已經加載的jQueryUI。在yii中更改已註冊腳本文件的順序

我知道我可以指定腳本包含在頁面上的哪個位置,但它似乎有點碰巧,只是簡單地將它包含在「結尾」 - 如果我在該插件後需要加載其他腳本?我如何確保他們按正確的順序加載 - 任何人有任何想法?

+0

您可以指定位置。請參閱[registerScript](http://www.yiiframework.com/doc/api/1.1/CClientScript/#registerScript-detail)和/或[registerScriptFile]的文檔(http://www.yiiframework.com/doc/ api/1.1/CClientScript /#registerScriptFile-detail) – adamors

+0

感謝您的想法,但我意識到這一點。您可以指定三個位置之一 - POS_BEGIN,POS_END和POS_READY - 如果我需要將所有插件加載到POS_BEGIN中,這些都無濟於事,但其中一些來自主佈局,另一些來自小部件。 – Hippyjim

+0

我明白了,您是否嘗試瀏覽zii小部件的源代碼? – adamors

回答

11

您可以使用Yii script packages中的依賴項功能。我有similar problem before

例如,你有腳本包CONFIG像下面,

'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', 
     ) 
    ), 
    ) 
) 

在上述樣品中,package2需要(取決於)package1package3需要package2。假設你的情況,一個小部件使用package2,另一個腳本使用package3。即使你沒有渲染widget,如果你使用Yii::app()->clientScript->registerPackage('package3');,它也會自動安裝package2,然後在package2之前安裝package1(或者如果之前某些腳本已經需要package1,則不會安裝)。

+0

+1,看起來不錯,爲什麼我沒有想到這個! –

+0

好東西,謝謝佩特拉,這正是我需要的。 – Hippyjim