DROPDOWNLIST在Cgridview柱与阿贾克斯负荷数据库(Dropdownlist in

2019-08-31 09:13发布

我得到了一些问题。 所以basicly我试图使下拉列表中CGridView列管理状态。 我想平变化加载到数据库中。 这是格列:

array(
        'name'=>'status',
        'type'=>'raw',
        'value'=>'CHtml::dropDownlist(\'status\',\'\',array(\'1\'=>\'Complete\',
                        \'2\'=>\'Paid\',
        \'3\'=>\'Not paid\'),array(
                                    \'class\'=>\'status\',
                                    \'options\'=>array($data->status=>array(\'selected\'=>\'selected\')),
                                    \'ajax\'=>array(
                                        \'type\' => \'POST\',
                                        \'url\'=>Yii::app()->createUrl(\'user/orders/status\'),                        
                                        \'data\'=>array(\'status\'=>\'js:this.value\',\'order\'=>$data->id),
        )
        ));',
        ),

这里是控制器动作代码

public function actionStatus()
    {
    if (isset($_POST['order'])){
        $model=$this->loadModel($_POST['order']);
        $model->status=$_POST['status'];        
    $model->save();

    }    
    }

那么,什么是问题。 我得到最后$数据 - >对元素至极下拉ID,而不是ID改变。 所有其他工作正常。

Maube它很容易,但我不能找到任何解决方案。 谢谢您的帮助。

Answer 1:

第一:你能避免这一切的丑陋逃脱代码,如果你在你的模型类使用一个getter:

public function getStatusDropdown()
{
    $stats = array(
        1 => 'Complete',
        2 => 'Paid',
        3 => 'Not paid',
    );
    return CHtml::dropDownlist('status',$this->status,$stats, array(
        'class'     => 'status',
        'data-id'   => $this->id,
    ));
}

现在添加像格列

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

现在所剩下的只是添加一些JavaScript。 相反,添加脚本为每一位按钮,如果你注册一个片段是更有效地统治他们。 你必须听change所有的下拉列表中的事件。 所以,你可以用右键你的GridView这样的页面上注册一个内联片段:

$url = $this->createUrl('user/orders/status');
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
);

我添加了一个body选择,以确保,如果你的GridView通过AJAX更新事件仍是起火。 您可能还需要一个成功的处理程序添加到您的ajaxPost()调用。

请注意,上述条款可能包含错别字,所以不只是复制和粘贴,但尝试去了解它是如何工作的。 它应该让你在正确的轨道上。



文章来源: Dropdownlist in Cgridview column with ajax load to database
标签: yii