我正在爲Yii應用程序創建一個小部件。主佈局視圖註冊了所有通用腳本文件,例如jQuery和jQueryUI。在我的小部件中,我想使用一個jQueryUI插件,它依賴於已經加載的jQueryUI。在yii中更改已註冊腳本文件的順序
我知道我可以指定腳本包含在頁面上的哪個位置,但它似乎有點碰巧,只是簡單地將它包含在「結尾」 - 如果我在該插件後需要加載其他腳本?我如何確保他們按正確的順序加載 - 任何人有任何想法?
我正在爲Yii應用程序創建一個小部件。主佈局視圖註冊了所有通用腳本文件,例如jQuery和jQueryUI。在我的小部件中,我想使用一個jQueryUI插件,它依賴於已經加載的jQueryUI。在yii中更改已註冊腳本文件的順序
我知道我可以指定腳本包含在頁面上的哪個位置,但它似乎有點碰巧,只是簡單地將它包含在「結尾」 - 如果我在該插件後需要加載其他腳本?我如何確保他們按正確的順序加載 - 任何人有任何想法?
您可以使用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
需要(取決於)package1
和package3
需要package2
。假設你的情況,一個小部件使用package2
,另一個腳本使用package3
。即使你沒有渲染widget,如果你使用Yii::app()->clientScript->registerPackage('package3');
,它也會自動安裝package2
,然後在package2
之前安裝package1
(或者如果之前某些腳本已經需要package1
,則不會安裝)。
+1,看起來不錯,爲什麼我沒有想到這個! –
好東西,謝謝佩特拉,這正是我需要的。 – Hippyjim
您可以指定位置。請參閱[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
感謝您的想法,但我意識到這一點。您可以指定三個位置之一 - POS_BEGIN,POS_END和POS_READY - 如果我需要將所有插件加載到POS_BEGIN中,這些都無濟於事,但其中一些來自主佈局,另一些來自小部件。 – Hippyjim
我明白了,您是否嘗試瀏覽zii小部件的源代碼? – adamors