RegisterPackage依赖于RegisterScriptFile

时间:2012-01-18 03:21:53

标签: php yii

我有一个需要Google Map库的软件包。我在视图中就像这样实现了它。

<?php Yii::app()->clientScript->registerScriptFile('http://maps.googleapis.com/maps/api/js?sensor=false&language=' . Yii::app()->language . '&region='.Yii::app()->language, CClientScript::POS_HEAD); ?>
<?php Yii::app()->clientScript->registerPackage('somelibrary'); ?>

(请注意,Google地图库需要参数Yii::app()->language)。

但是在输出中,包始终位于谷歌地图上方。

<script type="text/javascript" src="/project/assets/74e60422/somelibrary.js"></script>
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false&amp;language=id&amp;region=id"></script>

是否有任何解决方案可以将Google Maps库作为包依赖项?或者,至少,如何在谷歌地图之后(不远处)放置somelibrary包裹?

2 个答案:

答案 0 :(得分:3)

您可以通过配置CClientScript的packages属性,使Google地图脚本成为自己的包。 然后,您可以通过在程序包配置中配置“depends”来将googlemap添加到程序包依赖项中。然后,这应该以正确的顺序添加脚本。

要添加包,您可以执行以下操作(不尝试,但应该可以):

Yii::app()->clientScript->addPackage('googleMap', array(
    'baseUrl'=>'http://maps.googleapis.com/maps/api',
    'js'=>array('js?sensor=false&language=' . Yii::app()->language . '&region='.Yii::app()->language)
));

'googleMap'=>array(/*...*/)置于配置中时,它将起作用。

答案 1 :(得分:1)

registerPackage()方法没有任何选项来决定它的位置,但你可以像这样决定registerScriptfile()的位置......

public CClientScript registerScript(string $id, string $script, integer $position=4)

$ position整数JavaScript代码的位置。有效值包括以下内容: CClientScript :: POS_HEAD:脚本插入标题元素之前的head部分。 CClientScript :: POS_BEGIN:脚本插入主体部分的开头。 CClientScript :: POS_END:脚本插入主体部分的末尾。 CClientScript :: POS_LOAD:脚本插入window.onload()函数中。 CClientScript :: POS_READY:脚本插入到jQuery的ready函数中。