在Yii框架上使用ajaxButton / ajaxSubmitButton阻止加载jQuery资产

我的布局上有jQuery加载资产,我想使用CHtml::ajaxButton/ajaxSubmitButton 。 但是当我在运行时使用它与另一个渲染时,它再次加载jQuery资产并出错。 如何防止脚本加载?

 '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', ) ); ?> 

这也是IMO非常烦人的问题。 我解决的方法是创建一个CClientScript派生类,并将其用作clientScript组件(您可以覆盖配置文件中的类类型):

 'clientScript' => array ( 'class' => 'MyClientScript', ), 

我的类重写了“registerCoreScript”函数,该函数用于注册jii和Yii包含的其他基本脚本。 我在那里做的几乎是添加ajax的检查,如果是的话,不将其传递给父类。 它看起来像这样:

 public function registerCoreScript($sName) { if (Yii::app()->request->isAjaxRequest) return $this; return parent::registerCoreScript($sName); } 

这可以防止在ajax调用期间加载任何核心脚本(并再次添加资源)。

您也可以对其中的其他函数执行相同的操作(例如registerScriptFile)

希望有所帮助。

 Yii::app()->clientScript->scriptMap=array( 'jquery.js'=>false, 'jquery.ba-bbq.js'=>false, 'jquery.yiilistview.js'=>false ); 

使用这种方法可以防止加载已加载的javascript文件。

这是绕过这个烦人问题的另一种方法:在”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文件。 这允许您启用和禁用您想要/需要的任何内容。