0

我有一个带有父子子视图布局的视图。在父视图中,我有一个来自 YiiBooster 扩展的 GridView,它列出了数据库中的所有人员:

$this->widget('bootstrap.widgets.TbGridView', array(
        'dataProvider' => $model->search(),
        'filter' => $model,
        'ajaxUpdate' => true,
        'selectionChanged' => "updateChild", // new code
        'columns' => array(
            'firstName', 'lastName'
        )
    ));

它没有id,默认分配一个,即yw0。

在 selectionChanged 上调用的 updateChild js 方法获取一个人的所有信息,并使用 $('#childView').html(data) 使用该信息更新子视图。如果给父 GridView 一个明确的 ID,像这样:

$this->widget('bootstrap.widgets.TbGridView', array(
        'id' => 'parentGrid' // explicit id
        'dataProvider' => $model->search(),
        'filter' => $model,
        'ajaxUpdate' => true,
        'selectionChanged' => "updateChild", // new code
        'columns' => array(
            'firstName', 'lastName'
        )
    ));

子视图不会使用相关数据进行更新。我查看了源代码,控制器中的功能运行良好,并将所有相关数据传回,这是一个渲染问题,它们拒绝显示。

此外,如果我的子视图中有另一个 GridView(例如列出一个人所属的各种不同类别),那么在尝试单击一个人时会出现以下错误:“无法读取未定义的属性 tableClass”。

我的子视图是局部视图,因此使用了 renderPartial()。我允许它加载更多脚本,因为我的子视图具有用于子视图中各种元素的单击事件的 js 侦听器。

有人对发生的事情有任何想法吗?谢谢。

编辑:我现在已经使用显式 ID 进行工作,我从另一个问题中得到了答案。但是“无法读取未定义的属性表类”问题仍然存在。似乎当我想通过 renderPartial() 将 GridView 放入我的子视图时,它会弄乱父视图中的 GridView。

4

0 回答 0