beforeAjaxUpdate при удалении cgridview yii

Вот мой код

$this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'dsfsd',
    'dataProvider' => $model->search(),
    'filter' => $model,
    'cssFile' => false,
    'itemsCssClass' => 'table table-striped',
    'beforeAjaxUpdate'=>'js:function(id,options){$.blockUI({
                            message: "Please wait",
                            //showOverlay: false,
                            css: {
                                border: "none",
                                padding: "15px",
                                "-webkit-border-radius": "10px",
                                "-moz-border-radius": "10px",
                                opacity: 1,
                                "z-index": "9999"
                            }
                        });}',
    'columns' => array(
        array(
            'header' => '#',
            'name' => 'id',
            'type' => 'raw',
            'value' => 'CHtml::link(CHtml::encode($data->id),array("abc/m/".CHtml::encode($data->id)."/info"))',
            'htmlOptions' => array('width' => '40px'),
            'filter' => CHtml::activeTextField($model, 'id', array('placeholder' => 'search by id')),
        ), array(
            'header' => 'First name',
            'name' => '$data.user.f_name',
            'type' => 'raw',
            'value' => 'CHtml::encode($data->user->f_name)',
        ), array(
            'header' => 'Last name',
            'name' => '$data.user.l_name',
            'type' => 'raw',
            'value' => 'CHtml::encode($data->user->l_name)'
        ),

        array(
            'class' => 'CButtonColumn',
            'template' => '{update} {delete}',
            //'updateButtonUrl' => 'Yii::app()->createUrl("abc/xyz?id=".$data->id."&c_id=".$data->c_id)',
            'deleteButtonUrl' => 'Yii::app()->createUrl("xyv/abc",array("uid"=>$data->id))',
        ),
    ),
));

Ну, я хочу, чтобы операции в beforeAjaxUpdate работали только при нажатии кнопки удаления, а не для любых других действий ajax, таких как поиск или обновление. Как это возможно?


person iThink    schedule 01.06.2014    source источник


Ответы (1)


Вы можете добавить функцию обратного вызова для кнопки удаления: http://www.yiiframework.com/doc/api/1.1/CButtonColumn#buttons-detail

Вы должны установить опцию click в массиве конфигурации кнопок:

'columns' => array(    
 ...
 'buttons'=>array(
     'class'=>'CButtonColumn',
     'template'=>'{delete}{update}',
     'buttons'=>array(
         'delete'=>array(
             'click'=>'function(){/*your code here*/}'
         )
     )
  )
  ...
)

Вы можете вернуть false из функции обратного вызова, чтобы предотвратить удаление.

person Goodnickoff    schedule 01.06.2014
comment
Я не уверен в этом. Это перезаписывает действие по умолчанию при щелчке, чего я не хочу. Я хочу заменить загрузчик и показать собственное ожидающее сообщение, пока выполняется асинхронный запрос. - person iThink; 01.06.2014
comment
@iThink Это не перезаписывает действие по умолчанию. Если вы вернете true из функции обратного вызова, запрос ajax будет выполнен, но вы не увидите подтверждающего сообщения. Вы можете реализовать собственное подтверждение, заменить загрузчик и показать собственное сообщение об ожидании (и скрыть его в afterAjaxUpdate). - person Goodnickoff; 01.06.2014