FormItem data.content `选项`数据排序有问题,不能按要求排序。
radio

如题:

language 复制代码
<FormItem
                label="radio"
                type="radio"
                v-model="items.radio"
                :input-attr="{ size: 'large', border: true, content: { a: '选项a', b: '选项b' } }"
            />

其中content的 如果是字符串,排序就没有问题,但如果将上面键改为 { 2: '选项a', 1: '选项b' }, 则 选项b,会自动排到第一位。也就是如果是数字,就会按升序排列了。就完全改变了原有排序方式。

因为之前没发现这个问题,导致我怀疑框架 ->order('weigh desc') 有问题。经过无数次测试,最后才发现问题出在connent 里面。同样 checkbox应该也有类似的问题,只是目前没有去测试。

另外请分别介绍一下:

  • index.vue 中的 order
language 复制代码
defaultOrder: { prop: 'weigh', order: 'desc' },
  • 控制器中的 order
language 复制代码
protected string|array $defaultSortField = 'weigh,desc';
  • public function 中的 order
language 复制代码
$res = $this->model
            ->withJoin($this->withJoinTable, $this->withJoinType)
            ->alias($alias)
            ->where($where)
            ->order($order)
            ->order('weigh desc')
            ->paginate($limit);

这三个地方都有 order, 分别有什么作用。三者的关系是什么?

已采纳
YANG001
YANG001
这家伙很懒,什么也没写~
3周前

键如果是数字自动排序:这是老哥对 js 不够了解了,虽然这不太合理,但是它就是这样的,任意对象数字键都会自动排序

defaultOrder: { prop: 'weigh', order: 'desc' }, 是给前端 el-table 组件做初始化排序状态用的,因为发起api请求前就渲染表格了,CRUD生成时自动和 protected string|array $defaultSortField = 'weigh,desc'; 保持一致

第三个 order 就是控制器最终查询数据使用的 order,它可能取值上面的 $defaultSortField,也可能是用户改变排序后的新order,还可能是有序保证,即主键order

1个回答默认排序 投票数排序
siccd
siccd
这家伙很懒,什么也没写~
3周前

这都被你看出来了,我只管用使用工具,不管代码本身原理。
那就只有把数字改为字符串才能保证按要求排序了。

请先登录
0
1
0
2