2014-01-08 44 views
0

我跟着这个post。但是这里有两件事出错了。ajax cgridview更新下拉列表

  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\')    
        )', 
    

    ),

回答

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', 
), 

现在的伎俩派阿贾克斯:

$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。可能会出现错误,但这是你正在寻找的。