Yii:TbEditableColumn如何传递$ data-> id

时间:2014-02-14 16:20:36

标签: php twitter-bootstrap gridview yii

我正在尝试使用TbEditableColumn和类型select来设置下拉菜单。 我需要的下拉菜单由我调用的函数填充。 这适用于基本情况。但是对于另一列,下拉值取决于它所在的行(grid-view)。 因此,例如我想调用以填充下拉并传递当前数据的id的函数是:

$model->getPulldownValues($data->id)

但是这会引发一个错误,即未定义变量$data。有趣的是,在可编辑数组之外,我可以按预期使用$ data。 见下面的例子:

有什么想法吗?

$this->widget('bootstrap.widgets.TbExtendedGridView', array(
     'type' => 'striped bordered',
     'id'=>'order-image-grid',
     'dataProvider'=>$model->search(),
     'ajaxUpdate'=>true,
     'template' => "{items}\n{extendedSummary}",
     'rowCssClassExpression'=>'"FMDBGridColumn".$data->order_error',
     'columns'=>array(
        array(
                'class' => 'bootstrap.widgets.TbEditableColumn',
                'name' => 'streets',
                'htmlOptions'=>array('width'=>'150'),
                'value' => 'CHtml::value($data, "street")',
                'editable' => array(
                    'type' => 'select',
                    'source' => CHtml::listData($model->availableStreets($data->id), 'id', 'street'), 
                    'url' => $this->createUrl('cities/editable'),
                    'placement' => 'right',
                )
            ),
    ),
)); 

2 个答案:

答案 0 :(得分:1)

尝试更改方法" availableStreets"进入吸气剂,例如:

public function getAvailableStreets()
{
    // we don't need to send id as parameter of method, 
    // we can get it directly from model
    // e.g.: $id = $this->id;
    // 
    // put your code here
}

然后,在小部件中,使用属性

$model->availableStreets 

而不是方法

$model->availableStreets($id)

你也可以放 CHtml :: listData()进入你的getter并使用

'source' => 'availableStreets',

而不是

'source' => CHtml::listData($model->availableStreets($data->id), 'id', 'street'),

答案 1 :(得分:0)

您必须考虑'value' => 'CHtml::value($data, "street")',中的 $ data 是指$model->search()提供的模型对象,但网格外的$data是不同的(你还没有分享那是什么)。