Forçando a ordem de script do método registerScript no Yii
Eu criei um widget que registra seu próprio script como abaixo
class MyWidget extends CWidget {
public function run(){
Yii::app()->clientScript->registerScript(__CLASS__, <<<JAVASCRIPT
var a = "Hello World!";
JAVASCRIPT
, CClientScript::POS_END);
}
}
E no layout, eu chamo o widget assim
<?php $this->widget('MyWidget');?>
<?php echo $content;?>
Mas em um arquivo de visão, preciso da variável declarada por esse widget.
<?php
Yii::app()->clientScript->registerScript('script', <<<JAVASCRIPT
alert(a);
JAVASCRIPT
, CClientScript::POS_END);
?>
Note que no método registerScript eu uso POS_END como a posição do script, já que eu pretendo colocar todos os scripts (incluindo o CoreScript, por exemplo, jQuery, jQueryUI etc) após o<body>
tag.
O problema é que o script renderizado mostrará aquele do arquivo de visão e depois daquele do widget.
alert(a);
var a = "Hello World!";
Como podemos ver, o código acima não funcionará, então eu preciso colocar a segunda linha acima da primeira linha.
Alguma idéia de como forçar o pedido? Eu estou bem em estender oCClientScript
(e criar um novoregisterScript
método) desde que todos os scripts sejam renderizados na posição final e eu não precise puxar os códigos Javascript acima para um novo pacote ou arquivo.