我正在使用以下代码生成ajax请求:
echo CHtml::dropDownList('teamA', '', EnumController::getTeamOption(), array(
'empty' => '(Team / Single)',
'ajax' => array(
'type'=>'POST',
'url'=> $url,
'update'=>"#resultA",
//'data'=>"js:$('#teamA').hide().fadeIn()"
)
)
);
Run Code Online (Sandbox Code Playgroud)
在我的主要布局中,我有以下内容:
<?php Yii::app()->clientScript->scriptMap=array('jquery.js'=>false);?>
<?php Yii::app()->clientScript->scriptMap=array('jquery.min.js'=>false);?>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.7/jquery-ui.min.js"></script>
Run Code Online (Sandbox Code Playgroud)
Yii正在从资产中加载jQuery副本,然后是 - 另一个副本,直接来自Google.我只想使用Google副本并强制Yii不从资源加载自己的副本.我怎样才能做到这一点?
tas*_*enb 17
在Yii中,你永远不应该在主布局中硬编码任何javascript信息.
Yii可以确定是否已包含客户端脚本(javascript),但对于核心脚本(如jquery或jqueryui),您必须在配置文件中修改这些包.
打开main.php配置文件并在CClientScript组件中添加所需的所有js包(你应该在里面添加它components),如下所示:
'clientScript'=>array(
'packages'=>array(
'jquery'=>array(
'baseUrl'=>'//ajax.googleapis.com/ajax/libs/jquery/1.8/',
'js'=>array('jquery.min.js'),
'coreScriptPosition'=>CClientScript::POS_HEAD
),
'jquery.ui'=>array(
'baseUrl'=>'//ajax.googleapis.com/ajax/libs/jqueryui/1.8/',
'js'=>array('jquery-ui.min.js'),
'depends'=>array('jquery'),
'coreScriptPosition'=>CClientScript::POS_BEGIN
)
),
),
Run Code Online (Sandbox Code Playgroud)
然后,每次需要jquery时,只需在代码之前添加:
$cs = Yii::app()->getClientScript();
$cs->registerCoreScript('jquery');
Run Code Online (Sandbox Code Playgroud)
然后Yii将只包含一次jquery(或任何其他脚本),即使你在代码中多次调用它也是如此.
按照Yii Special Topics Performance的说明,我做了一个快速测试,这个工作:
在主要布局的顶部:
<?php
$cs=Yii::app()->clientScript;
$cs->scriptMap=array(
'jquery.js'=>false,
'jquery.ui.js' => false,
);?>
Run Code Online (Sandbox Code Playgroud)
在<head>主要布局的部分:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.7/jquery-ui.min.js"></script>
Run Code Online (Sandbox Code Playgroud)
要么
<?php echo CGoogleApi::init(); ?>
<?php echo CHtml::script(
CGoogleApi::load('jquery','1.7.2') . "\n" .
CGoogleApi::load('jqueryui','1.8.17')
); ?>
Run Code Online (Sandbox Code Playgroud)
我实际上会使用CGoogleApi助手,但jsapi显然无法加载高于我示例中的jquery版本!我猜这是谷歌的缓慢更新,因为它在普通文件中也不起作用.
或者js文件仍然在你的缓存中?