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

Dar*_*Dar 3 javascript php jquery yii

我的布局上有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',
                                        )
                                    );
    ?>
Run Code Online (Sandbox Code Playgroud)

Bli*_*izz 6

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

'clientScript' => array
(
    'class'                       => 'MyClientScript',
),
Run Code Online (Sandbox Code Playgroud)

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

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

   return parent::registerCoreScript($sName);
}
Run Code Online (Sandbox Code Playgroud)

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

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

希望有所帮助.


Onk*_*nwa 6

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

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