CGridView CbutonColumn Custom Button Нажатие не работает - PullRequest
1 голос
/ 28 февраля 2012

Я использую CGridView, в котором у меня есть CButtonColumn, для которого я определил кнопку."щелчок" js не вызывается.URL называется хотя и завершается.Я хочу показать подтверждение пользователю, но оно никогда не появляется.Согласно документации, «щелчок» - это функция JS, которая вызывается при нажатии, но у меня она не работает.

$this->widget('zii.widgets.grid.CGridView', array(
            'dataProvider'=>$model->search(),
            'filter'=>$model,
            'columns'=>array(
                    'id',
                    'name',
                    'question',
                    'created',                      
                    array(
                            'class'=>'CButtonColumn',
                            'header'=>'Reset',
                            'template'=>'{reset}',
                            'buttons'=>array(
                                    'reset'=>array(
                                            'label'=>'Reset',
                                            'click'=>'function(){alert("Are you sure?");}',
                                            'imageUrl'=>Yii::app()->request->baseUrl.'/images/reset.png',
                                            'url'=>'Yii::app()->createUrl("favs/reset", array("id"=>$data->id))',                                           
                                            'options'=>array(
                                                    'ajax'=>array(
                                                            'type'=>'POST',
                                                            'url'=>"js:$(this).attr('href')",                                                               
                                                    ),
                                            ),
                                    ),
                            ),                      
                    ),                      
            ),
    ));

1 Ответ

1 голос
/ 28 февраля 2012

Это как-то связано с jQuery, сгенерированным Yii для вашего кода:

jQuery('#your-grid-id a.reset').live('click',function(){alert("Are you sure?");});
/* more jquery ... 
... 
...
*/
jQuery('body').undelegate('#yt1','click').delegate('#yt1','click',function(){jQuery.ajax({'type':'GET','url':$(this).attr('href'),'cache':false,'data':jQuery(this).parents("form").serialize()});return false;});
// similar jquery follows for the other rows of the grid view 

Как видите, обработчик события click тега <a> - это первая функция оповещения, которую вы предоставляете, используя опцию click.
Затем этот обработчик событий щелчка удаляется с помощью undelegate, а другой обработчик добавляется с помощью delegate, это происходит потому, что вы добавили параметр ajax.
Если вы удалите опцию ajax, вы увидите диалоговое окно и увидите, что последовательность делегатов undelegate ... удаляется из сгенерированного кода.

Для достижения вашей функциональности вы можете сделать что-то еще:

  1. Используйте опцию beforeSend jjery's ajax, чтобы показать диалоговое окно подтверждения, предупреждение не является подтверждением, кстати.
  2. Используйте опцию success jjery's ajax, чтобы обновить ваш вид или показать пользователю сообщение о том, что сброс сделан.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...