我的布局上有jQuery加载资产,我想使用CHtml::ajaxButton/ajaxSubmitButton
。
但是当我在运行时使用它与另一个渲染时,它再次加载jQuery资源并产生错误。
如何防止脚本加载?
<?php echo CHtml::ajaxSubmitButton( 'Submit',
CHtml::normalizeUrl(array('site/AjaxRequest/30')),
array(
'error'=>'js:function(){
alert(\'error\');
}',
'beforeSend'=>'js:function(){
alert(\'beforeSend\');
}',
'success'=>'js:function(data){
alert(\'data from server: \'+data);
}',
'complete'=>'js:function(){
alert(\'complete\');
}',
//'update'=>'#response',
)
);
?>
答案 0 :(得分:6)
这也是一个非常讨厌的问题IMO。我解决的方法是创建CClientScript的派生类,并将其用作clientScript组件(您可以覆盖配置文件中的类类型):
'clientScript' => array
(
'class' => 'MyClientScript',
),
我的类重写了“registerCoreScript”函数,该函数用于注册Yii包含的jQuery和其他基本脚本。 我在那里做的几乎是添加ajax的检查,如果是的话,不将它传递给父类。 它看起来像这样:
public function registerCoreScript($sName)
{
if (Yii::app()->request->isAjaxRequest)
return $this;
return parent::registerCoreScript($sName);
}
这可以防止在ajax调用期间加载任何核心脚本(并再次添加资源)。
您也可以对其中的其他功能执行相同的操作(例如registerScriptFile)
希望有所帮助。
答案 1 :(得分:6)
Yii::app()->clientScript->scriptMap=array(
'jquery.js'=>false,
'jquery.ba-bbq.js'=>false,
'jquery.yiilistview.js'=>false
);
使用这种方法来阻止加载已加载的javascript文件。
答案 2 :(得分:1)
这是解决这个令人讨厌的问题的另一种方法:在''render'调用之前禁用脚本:
Yii::app()->clientScript->corePackages = array();
Yii::app()->clientScript->scriptMap = array('jquery.yiigridview.js' => false,
'CGridView.css' => false,
'pager.css' => false,
...
'jquery-ui-i18n.min.js'=> false,);
echo $this->renderPartial('myView',array('model'=>$model, 'dataProvider'=>$dataProvider),true,true);
您必须手动放置任何不希望插入html的.js和.css文件。这允许您启用和禁用您想要/需要的任何内容。