# combining
包含如下几种类型:
# allOf
# 描述
- 需要对所有的
schema
有效 - 官方文档 - JSON Schema allOf (opens new window)
# 数据校验
allOf
需要对所有的schema
有效
在对
schema
数据处理的过程中会对allOf
的每一项做深度合并操作,针对一些无法合并的 会直接放弃操作。// 比如如下数据 永远都是 `false` 无法合并 schema = { "allOf": [ { "type": "string" }, { "type": "number" } ] }
如下演示:schema
ui-schema
error-schema
相关配置
# anyOf
# 描述
- 对任何一个
schema
有效即可,推荐在oneOf
anyOf
都可以时使用anyOf
- 官方文档 - JSON Schema anyOf (opens new window)
- 使用了
oneOfSelect
anyOfSelect
配置下拉选项组件 - anyOf 内渲染object、array默认不显示
title
和description
,如果需要可以使用ui:showTitle: true
,ui:description: true
配置显示
# 数据校验
- 参考下面的使用案例
# anyOfSelect、oneOfSelect
anyOfSelect
、oneOfSelect
用来配置 anyOf 或者 oneOf的下拉选项组件。
下拉选项名会使用对应anyOf选项内的title字段,但如果你设置了 ui:enumOptions
会直接使用该选项。
如下:
const schema = {
anyOfSelect: {
'ui:widget': 'RadioWidget',
'ui:title': '选择选项',
'ui:options': {},
'ui:enumOptions': [{
label: '选项一',
value: 0
}, {
label: '选项二',
value: 1
}]
}
}
# anyOf 数据回填
在编辑页面时anyOf 当前选项是根据当前的formData来对每个anyOf的选项做校验,如果校验成功就返回匹配。
如果使用相同的数据结构,为了保证正确匹配,可以使用 const
关键字来标记每个选项的值保证正确匹配当前结果
如下:
const schema = {
type: 'object',
title: '选项',
required: [],
anyOfSelect: {
'ui:title': '渲染组件'
},
anyOf: [{
title: 'el-switch',
type: 'object',
properties: {
schemaOptions: {
type: 'object',
properties: {
'ui:widget': {
title: '使用组件',
type: 'string',
default: 'el-switch',
const: 'el-switch',
'ui:hidden': true
},
other: {
title: '其它',
type: 'string'
}
}
}
}
}, {
title: 'el-checkbox组件',
type: 'object',
properties: {
schemaOptions: {
type: 'object',
properties: {
'ui:widget': {
title: '使用组件',
type: 'string',
default: 'el-checkbox',
const: 'el-checkbox',
'ui:hidden': true
},
other: {
title: '其它',
type: 'string'
}
}
}
}
}]
}
# 特殊字段
# const
const
如果被包含在anyOf
内,会默认被渲染为单选框,const
为单选框 value,title
为单选框 label。
如下演示:schema
ui-schema
error-schema
相关配置
提示
anyOf
oneOf
使用了oneOfSelect
anyOfSelect
配置下拉选项,schema
配置了同名key会导致error-schema
,ui-schema
无法正常工作- 当前
anyOf
选中的schema
会和原有schema
做浅合并,Object.assign({}, this.schema, curSelectSchema)
ui-schema
、error-schema
在anyOf同级的配置会作为公共配置传给当前选中的子schema
# oneOf
# 描述
- 有且只能对一个
schema
有效 - 官方文档 - JSON Schema oneOf (opens new window)
# 数据校验
这里和 anyof
使用方法一致,查看anyof
# not
# 描述
- 对当前
schema
无效 - 官方文档 - JSON Schema not (opens new window)
# 数据校验
- 好像不支持 吧 ...
- 应该没啥应用场景 吧...
- 先不支持了 吧...
← array