关于ajax上cgridview更新的下拉行

时间:2014-01-08 19:21:36

标签: ajax yii cgridview

我遵循了post。但是这里有两件事情出错了。

  1. ID始终定位到网格上的最后一个ID。
  2. 更新cgridview时,我需要刷新页面以更新下一页(最后一页,错误的行)。

        array(
        'header'=>"Status Change",
        'type'=>'raw',
        'value'=>'CHtml::dropDownList($data->storeStatus->status, \'\',
            array(\'1\' => \'Active\', \'2\' => \'Inactive\',\'3\'=>\'Suspended\',\'4\'=>\'Pending\'),
            array(\'empty\' => \'Status\',\'\',
            "ajax"=>array(
            \'type\' => \'POST\',
            \'url\' => Yii::app()->controller->createUrl(\'ChangeStoreStatus\',array(\'id\'=>$data->store_id)),
            \'data\'=> "js:{store_status_id: $(this).val(),store_id: $data->store_id}", 
            \'success\'=> "function() {
                        $.fn.yiiGridView.update(\'inactive-store\');
                }",
            \'error\'=> "function (xhr, ajaxOptions, thrownError) {
                    alert(thrownError);
                  }",
            )),
            array(\'class\'=>\'ChangeStoreStatus\')            
         )',
    

    ),

1 个答案:

答案 0 :(得分:0)

您可以在模型中使用getter

public function getStatusDropdown()
{
    $stats = array(
        '1' => 'Active', '2' => 'Inactive','3'=>'Suspended','4'=>'Pending'
    );
    return CHtml::dropDownlist('status',$this->status,$stats, array(
        'class'     => 'status',
        'data-id'   => $this->id,
    ));
}

所以在你的网格中你会有

array(
    'name'  => 'Status',
    'type'  => 'raw',
    'value' => '$data->statusDropdown',
),

现在发送ajax的技巧:

$url = $this->createUrl('ChangeStoreStatus');
Yii::app()->clientScript->registerScript('initStatus',
    "$('select.status').on('change','body',function() {
        el = $(this);
        $.ajaxPost('$url', {status: el.val(), id: el.data('id')}
    });",
    CClientScript::POS_READY
);

现在,您获得了网格中元素的下拉值和ID。可能是错误,但这正是你要找的。