2017-04-17 16:01:48 4239次浏览 6条回答 0 悬赏 10 金钱

yii2 gridview tr中的data-key值设置之后不生效,如果我设置'data-value'的时候值就能出来,但是使用'data-key'的时候就变成了如图所示这个样子QQ图片20170417153400.png

QQ图片20170417162958.png

补充于 2017-04-17 16:56

QQ图片20170417165503.png

QQ图片20170417165514.png

最佳答案

  • johnny1991 发布于 2017-04-17 17:24 举报

    参照yii\grid\GridView的这两个方法

    public function renderTableBody()
        {
            $models = array_values($this->dataProvider->getModels());
            $keys = $this->dataProvider->getKeys();
            $rows = [];
            foreach ($models as $index => $model) {
                $key = $keys[$index];
                if ($this->beforeRow !== null) {
                    $row = call_user_func($this->beforeRow, $model, $key, $index, $this);
                    if (!empty($row)) {
                        $rows[] = $row;
                    }
                }
    
                $rows[] = $this->renderTableRow($model, $key, $index);
    
                if ($this->afterRow !== null) {
                    $row = call_user_func($this->afterRow, $model, $key, $index, $this);
                    if (!empty($row)) {
                        $rows[] = $row;
                    }
                }
            }
    
            if (empty($rows)) {
                $colspan = count($this->columns);
    
                return "<tbody>\n<tr><td colspan=\"$colspan\">" . $this->renderEmpty() . "</td></tr>\n</tbody>";
            } else {
                return "<tbody>\n" . implode("\n", $rows) . "\n</tbody>";
            }
        }
    
    public function renderTableRow($model, $key, $index)
        {
            $cells = [];
            /* @var $column Column */
            foreach ($this->columns as $column) {
                $cells[] = $column->renderDataCell($model, $key, $index);
            }
            if ($this->rowOptions instanceof Closure) {
                $options = call_user_func($this->rowOptions, $model, $key, $index, $this);
            } else {
                $options = $this->rowOptions;
            }
            $options['data-key'] = is_array($key) ? json_encode($key) : (string) $key;
    
            return Html::tag('tr', implode('', $cells), $options);
        }
    
    9 条回复
    回复于 2017-04-17 17:27 回复

    现在的问题是只有设置'data-key'的时候不行

    回复于 2017-04-17 17:28 回复

    ‘data-key’从源码看起来,是单独设置的,
    $options['data-key'] = is_array($key) ? json_encode($key) : (string) $key;

    回复于 2017-04-17 17:31 回复

    具体通过这个来设置的
    $keys = $this->dataProvider->getKeys();

    回复于 2017-04-17 17:39 回复

    QQ图片20170417173924.png

    回复于 2017-04-17 17:40 回复
     'rowOptions' => function ($model, $key,$index, $grid){
                  return ['data-key'=>$model['i_id']];
                },
    
    回复于 2017-04-17 17:45 回复

    看源码啊

    回复于 2017-04-19 09:19 回复

    这么多都一样,就先给最先说的吧。虽然早就看过了。。醉了

    回复于 2017-06-19 15:29 回复

    可以这样
    $dataProvider = new ActiveDataProvider([

            'query' => $query,
            'sort' => [
                'defaultOrder' => [
                    'id' => SORT_ASC
                ],
            ],
            'key' => 'order_id'
        ]);
    
    回复于 2018-05-03 21:58 回复

    正解!!!

    觉得很赞
  • 回答于 2017-04-17 16:30 举报

    QQ截图20170417163141.jpg

    你按照上图的设置配置一下试试。

    4 条回复
    回复于 2017-04-17 16:32 回复

    问题改了下,顺便说明这样不行

    回复于 2017-04-17 16:48 回复

    我的怎么是可以的?

    回复于 2017-04-17 16:53 回复

    你的姿势肯定不对

    回复于 2017-04-18 14:02 回复

    ..姿势很对

  • 回答于 2017-04-17 16:51 举报

    QQ截图20170417165326.jpg

    1 条回复
    回复于 2017-04-17 16:56 回复

    不太清楚,我给你贴下图,再补充问题里面,你看下,难道是因为不是数字?

  • 回答于 2017-04-17 17:03 举报

    给我瞅瞅你这块的代码是怎么设置的 gridview

    3 条回复
    回复于 2017-04-17 17:23 回复

    QQ图片20170417172304.png

    回复于 2017-04-17 17:28 回复

    那个'summary' => false,你没设置啊

    回复于 2017-04-17 17:42 回复

    设置了,没用啊

  • 回答于 2017-04-17 18:30 举报

    你好,根据源码来看,data-key是被源码覆盖的,这个值源码会自动赋值为每条模型的主键值,所以你可以把这个属性换成别的就可以了,详情请看类 yii\grid\GridView源码的第514行

  • 回答于 2017-04-18 10:43 举报

    源码里可见 data-key 已经被Yii 使用了,就好像 case关键词被PHP使用了一样,如果你建了一个 Case AR class 一样无法用,所以尽量避开吧。 楼上几位都很厉害,直接就翻源码了,哈哈。

    2 条回复
    回复于 2017-04-18 11:11 回复

    嗯,我一开始测试的时候就看了上面的源码。但是在有个群里面有个人用的跟我是差不多的,代码也没什么问题,但是他的data-key就可以跟他的id相同,所以说比较纳闷

    回复于 2017-04-18 11:52 回复

    正常啦,所有的都一样,写写就有感觉了。以后面试的时候可以拿这个来弹弹,会加分。

您需要登录后才可以回答。登录 | 立即注册
今之人兮
CEO

今之人兮 郑州

注册时间:2016-05-04
最后登录:2021-09-29
在线时长:49小时14分
  • 粉丝8
  • 金钱16365
  • 威望10
  • 积分16955

热门问题