防止jQuery的资产负载与ajaxButton / ajaxSubmitButton上Yii框架(

2019-07-30 00:15发布

我有我的布局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',
                                        )
                                    );
    ?>

Answer 1:

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

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

我的类覆盖了“registerCoreScript”的功能,其用于注册jQuery和其的Yii包括其它基本脚本。 差不多就是我做的有添加一个检查阿贾克斯,如果它不把它传递给父类。 它看起来是这样的:

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

   return parent::registerCoreScript($sName);
}

这可以防止加载任何核心脚本(并重新加入资产)Ajax调用期间。

你可以做其他功能同样在那里太(如registerScriptFile)

希望帮助。



Answer 2:

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

用这种方式来阻止其加载已经加载JavaScript文件。



Answer 3:

这里是另一种方式来解决这个恼人的问题:禁用脚本之前去“渲染”拨打:

    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文件出台。 这使您可以启用和禁用你想/需要什么。



文章来源: Prevent loading of jQuery assets with ajaxButton/ajaxSubmitButton on Yii framework