從registerScript方法強制腳本命令我創建了一個類似下面Yii中
class MyWidget extends CWidget {
public function run(){
Yii::app()->clientScript->registerScript(__CLASS__, <<<JAVASCRIPT
var a = "Hello World!";
JAVASCRIPT
, CClientScript::POS_END);
}
}
而且在佈局中,我這樣調用
<?php $this->widget('MyWidget');?>
<?php echo $content;?>
但在一個小部件註冊了自己的腳本,插件查看文件,我需要該小部件聲明的變量。
<?php
Yii::app()->clientScript->registerScript('script', <<<JAVASCRIPT
alert(a);
JAVASCRIPT
, CClientScript::POS_END);
?>
注意,在這兩種方法registerScript我用POS_END作爲腳本位置,因爲我打算在<body>
標籤後,把所有的腳本(包括CoreScript例如jQuery的,jQueryUI的等)。
問題是,呈現的腳本將顯示視圖文件中的一個,然後從該部件中顯示一個。
alert(a);
var a = "Hello World!";
正如我們所看到的,上面的代碼不會工作,所以我需要把第二行放在第一行上面。
關於如何強制訂單的任何想法?只要所有腳本都將呈現在最終位置,並且我不必將上面的內聯Javascript代碼拖到新的包或文件中,我就可以擴展CClientScript
(並創建新的registerScript
方法)。
我的目的是使所有的端腳本。事情是小部件中的腳本依賴於jQuery,並且我通過設置'coreScriptPosition'字段來完成所有的coreScripts(http://www.yiiframework.com/doc/api/1.1/CClientScript#coreScriptPosition-細節)作爲POS_END。 – 2012-07-26 08:28:04
那麼,你有不好的主意,或者U必須將var聲明分割爲HEAD,小部件主體腳本END或U必須將END更改爲READY:Yii :: app() - > clientScript-> registerScript('script' ,警報(a); JAVASCRIPT ,CClientScript :: POS_READY); – Sergey 2012-07-26 09:33:27