给页面增加子表编辑
适用场景
- 父实体编辑页里需要同时编辑多个
to-many子表。 - 需要子表跟随父表一起新增、编辑、保存。
AI 决策提示
- 先确认 ORM relation 和 XMeta 已经把子表暴露出来。
- 再决定子表是内联
input-table,还是引用外部view/page。 - 不要先从页面硬塞一个随机数组控件开始。
最小闭环
1. ORM relation 必须存在
例如 to-many:
attributesproductsspecifications
2. XMeta 允许页面编辑
重点看:
insertable="true"updatable="true"ui:editGrid/ui:viewGrid
3. 必要时在保留层 XMeta 再开启
如果生成元数据还不够,优先在保留层 .xmeta 开启,而不是先写 Java。
4. 在父页面里接入子表编辑器
常见方式:
- 直接
gen-control+input-table <view path="...Xxx.view.xml" grid="ref-edit"/><view path="...fragment.page.yaml"/>
最值得抄的真实链路
C:/can/nop/nop-app-mall 的 LitemallGoods
- ORM relation:
app-mall-dao/src/main/resources/_vfs/app/mall/orm/_app.orm.xml - 生成 XMeta:
app-mall-meta/src/main/resources/_vfs/app/mall/model/LitemallGoods/_LitemallGoods.xmeta - 保留层 XMeta:
app-mall-meta/src/main/resources/_vfs/app/mall/model/LitemallGoods/LitemallGoods.xmeta - 父页面:
app-mall-web/src/main/resources/_vfs/app/mall/pages/LitemallGoods/LitemallGoods.view.xml - 外部子表 view:
app-mall-web/src/main/resources/_vfs/app/mall/pages/LitemallGoodsProduct/LitemallGoodsProduct.view.xml
这个例子里:
- ORM 先声明
attributes/products/specifications三个to-many。 - XMeta 为它们生成
sub-grid-edit/sub-grid-view能力。 - 保留层 XMeta 再明确开放插入和更新。
- 页面里分别用
input-table、外部view、外部page.yaml三种方式接入子表。
常见坑
- 页面里想编辑子表,但 ORM relation 根本没建。
- relation 有了,但 XMeta 还是不可插入/更新。
- 把复杂子表全内联在一个页面里,导致维护困难;本来应该拆成外部
view或 page 片段。
相关文档
./add-field-and-validation.md../02-core-guides/page-dsl-pattern-catalog.md../02-core-guides/view-and-page-customization.md