TbJsonGridView + TbJsonCheckBoxColumn - как вызвать действие для нескольких строк? (Экран)

У меня есть ситуация, как на этом экране: Скриншот

У меня есть столбец, где пользователь проверяет строки. После этого пользователь может вызвать некоторые действия, такие как пример удаления данных.

Чтобы показать меню с несколькими действиями для пользователей, я использую раскрывающийся список кнопок в Yii-Booster TbButtonGroup. Я перепробовал все возможные buttonType и все не работает.

Все, что мне нужно, это отправить информацию о том, какие строки выбраны, выполнить некоторые действия внутри контроллера и после этого перезагрузить сетку. Я понятия не имею, как...

Для генерации выпадающего меню я использую код:

    Yii::app()->controller->widget('bootstrap.widgets.TbButtonGroup', array(
        'size'=>'mini',
        'type'=>'link',
        'buttons'=>array(
            array('icon'=>'edit', 'items'=>$this->filter),
        ),
    ));

To generate grid i use code:
$this->widget('bootstrap.widgets.TbJsonGridView', array(
    'dataProvider' => $model->search(),
    'filter' => $model,
    'type' => 'striped condensed',
    'summaryText' => false,
    'cacheTTL' => 10, // cache will be stored 10 seconds (see cacheTTLType)
    'cacheTTLType' => 's', // type can be of seconds, minutes or hours
    'selectableRows'=>2,
    'columns' => array(
        array(
            'class'=>'ext._TbJsonCheckBoxColumn._TbJsonCheckBoxColumn',
            'id'=>'selectedTickets',
            'filter'=>array(
                array('label'=>'close', 'url'=>'javascript:'.CHtml::ajax(array('type'=>'POST', 'url'=>array('','multi_action'=>'close'), 'success'=>'function(data, status){ console.log(data); console.log(status); }', 'error'=>"function(data, status){ console.log(data); console.log(status); }")) ),
                array('label'=>'Another action', 'url'=>'#'),
                array('label'=>'Something else', 'url'=>'#'),
                '---',
                array('label'=>'Separate link', 'url'=>'#'),
            ),
        ),
        'id',
        'email_from',
        'subject',
        'status',
        array(
            'name'=>'last_update',
            'value'=>'$data->last_update_from_now',
            //'filter'=>false,
        ),
        array(
            'header' => Yii::t('ses', 'Edit'),
            'class' => 'bootstrap.widgets.TbJsonButtonColumn',
            'template' => '{view} {update} {delete}',
        ),
    ),
    ));

Для создания формы я использую код:

$this->widget('bootstrap.widgets.TbButton',array(
    'label' => 'Add new ticket',
    'type' => 'primary',
    'size' => 'medium',
    'url' => $this->createUrl('create'),
));

<?php
$form = $this->beginWidget('bootstrap.widgets.TbActiveForm', array(
    'id'=>'tickets',
    'type'=>'horizontal',
    'enableAjaxValidation'=>true,
));

echo $this->renderPartial('_grid', array('model'=>$model));
echo CHtml::ajaxSubmitButton('Activate',array('menu/ajaxupdate','act'=>'doActive'), array('success'=>'reloadGrid'));

$this->endWidget();

1 ответ

Решение

После многих потраченных часов я написал что-то подобное, и это решило мою проблему:

Yii::app()->clientScript->registerScript('multi_button', "
    $('[data-multi=action]').delegate('li a', 'click', function(event){
        event.preventDefault();

        var th = $(this),
        action = th.attr('href').substr(1);

        if( action=='delete' && !confirm('Are you sure you want to delete selected items?') ) return true;
        ".
        CHtml::ajax(array(
            'type'=>'POST',
            'data'=>'js:th.closest("form").serialize()',
            'url'=>'js:location.href+(/\?/.test(location.href) ? "&" : "?")+"multi_action="+action',
            'success'=>'function(data, status){ th.closest("div.grid-view").yiiJsonGridView("update"); }',
            'error'=>'function(data, status){ alert(status); }',
            'cache'=>false
        ))."
    });
");
Другие вопросы по тегам