baidu/amis
View on GitHubvalidateApi 验证 联动数据时, 即使设置了 ``"validateOnChange": true,`` , 也只会验证第一次时候的数据
Open
#10360 opened on May 31, 2024
bughelp wantedneed confirm
Description
描述问题:
validateApi 验证 联动数据 时, 即使设置了 "validateOnChange": true, , 也只会验证第一次时候的数据
截图或视频:
如何复现(请务必完整填写下面内容):
- 你是如何使用 amis 的?
amis + react
- amis 版本
3.5.2
- 粘贴有问题的完整
amis schema代码:
{
type: "select",
label: "选择想要的数据",
name: "select-want",
options: msgLevelOption,
multiple: true,
value: "${help\\-for\\-want\\-select}", // 有斜杠转义
// 单项数据校验
validateApi: {
"method": "post",
"url": "/post/save/data",
"data": {
"select-want": "${select\\-want | sortByVal:" + msgLevel + "}",
// "select-want": "${help\\-for\\-want\\-select}",
},
},
// 这个有个bug, 当 value 是通过其他组件联动修改的时候, 修改后的数据不会触发校验.
"validateOnChange": true,
},
{
label: "辅助select",
type: "input-text",
name: "help-for-want-select",
value: "${select\\-want | sortByVal:" + msgLevel + "}",
// visible: false,
},
如schema所示, 我想将 select-want 的数据经过转换后再验证, 目前能用的方法只有在 api 中显示将数据先转换一遍.
因为 select-want 的数据被 help-for-want-select 联动刷新后, 不会触发validateApi.
剩余关键部分代码上下文
const registerSortByVal = () => {
// 按照给定 sortData 的顺序排序
registerFilter('sortByVal', (data: string, sortData: string[]) => {
if (!data || data.indexOf(',') === -1) return data
const newData = data.split(',')
newData.sort((a, b) => {
const aIndex = sortData.indexOf(a)
const bIndex = sortData.indexOf(b)
return aIndex > bIndex ? 1 : -1;
})
return newData.join(',')
})
}
const msgLevel = ['debug', 'info', 'warning', 'error', 'circ']
const msgLevelOption = msgLevel.map<optionProp>(data => {
return {
label: data,
value: data
}
})
registerSortByVal()
问题
我不确定这算不算是一个bug, 但正常来说, 即使是联动改变数据也应该触发提交.
- 其他说明
这里使用 过滤器 而不是 表达式 是因为, 表达式传不进去参数, 官网只找到自定义过滤器的说明而无自定表达式的说明;
请问官方是否有这样的支持(自定义表达式).