有没有办法使用自定义'dataProvider'选项重新渲染包含CGridView的视图?例如,我有这样的视图文件
<?php $this->widget('bootstrap.widgets.BootGridView',array(
'id'=>'operations-grid',
'type'=>'striped bordered',
'dataProvider'=>$model->search(),
'columns'=>array(
array('name'=>'operationType','value'=>'$data->operationType->name'),
array(
'name'=>'creation_date','type'=>'datetime'
),
'ammount_usd:raw:Ammount',
'comment:text:Comment',
array(
'name'=>'currency',
'value'=>'$data->currency->short',
),
array(
'name'=>'client',
'value'=>'$data->client->fio'
),
array(
'name'=>'organization',
'value'=>'$data->organization->name'
),
array(
'class'=>'bootstrap.widgets.BootButtonColumn',
'header'=>'Action'
),
),
)); ?>
作为提供者,我有$model->search()
,但我想要,例如,如果按钮按下此视图,则通过具有不同dataProvider
的ajax重新呈现。有没有办法实现这个目标?感谢。
答案 0 :(得分:3)
您可以通过多种方式完成此操作。 其中,您可以让控制器为视图提供$ dataProvider,如下所示:
$this->widget('bootstrap.widgets.BootGridView',array(
'id'=>'operations-grid',
'type'=>'striped bordered',
'dataProvider'=>$dataProvider,
控制器可以根据到达该请求的参数来实例化所需的数据提供者。然后视图将此数据提供程序传递给CGridView,完全忘记了它的精确类型。
如前所述,您可以扩展CDataProvider(与CActiveDataProvider扩展相同的类),只要它提供了所需的API,就可以完全自定义它。见其documentation
答案 1 :(得分:1)
数据提供者的要点是根据某些输入为您提供某个模型的适当数据。 Search()做得很好,因为您只需要使用要搜索的相应属性来实例化一个模型类,数据提供者将为您提供符合该条件的所有数据。
如果要更改数据提供者的输出,可以使用修改后的search()函数扩展模型类。如果你试图将一个完全不同的模型传递给你的数据提供者,我会为它设置一个不同的视图,因为它无论如何都会有不同的列。
答案 2 :(得分:0)
动态CGridView上的这个wiki应该会给你很多想法。