Skip to content

PageComponentSchema.dataSource.view 是声明了但无人消费的绑定:objectui resolveElementDataSource 丢弃 view 键(除测试外零调用方),list-view 上照 spec 写 dataSource 反而运行时报错(17.0.0-rc.2) #5576

Description

@yinlianghui

发现于 objectstack-ai/hotcrm#771 / PR objectstack-ai/hotcrm#784(Sales Home 标签页内嵌视图的实测过程)。与已关闭的 #4413 同缺陷类——「契约 publish 了渲染器根本不读的绑定」——但 #4413 处理的是 record:* 四个 block 的 objectName/recordId,不含本键,故单独立此单。

现象(单变量对照,pinned 17.0.0-rc.2,真实 dev server + Chromium)

同一张 type: 'home' 页面上三个 list-view 页面组件:

  • 不带 dataSource 的两个 → 正常渲染真实数据表格;
  • 按 spec 写 dataSource: { object, view } 的那个 → 运行时直接失败 "Couldn't load records"

两个方向各复现一次(加上即坏、去掉即好)。

机理

  • PageComponentSchema.dataSource.view(ElementDataSourceSchemaview 键)在 spec 里声明;
  • objectui 的 resolveElementDataSourceview整个丢弃;
  • 且该函数除测试外零调用方——即「按名字引用 saved view」这条声明的能力在 rc.2 运行时不存在,写了还会把组件弄坏。

应用侧的实际代价

hotcrm PR objectstack-ai/hotcrm#784 因此无法按名字引用 saved view,只能从 src/views/*.view.ts 读出 columns / filter / sort 内联进 page 组件(PR body 已记录此取舍与理由)。每个这样做的应用都在为同一个视图维护两份配置的漂移风险——这正是 saved-view 引用本该消灭的问题。

验收建议(同 #4413 的结论口径:当前状态不能留)

二选一:

  1. objectui 消费 view 键——按名字解析 saved view 的 columns/filter/sort 并渲染;或
  2. 从 spec / 公开契约撤下该键,并让 validate 拒绝它——不再让一个「声明+校验但不执行、用了反而坏」的绑定继续误导作者。

/cc 需要 objectui 侧改动(objectstack-ai/objectui:resolveElementDataSource)。

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions