baidu/amis

validateApi 验证 联动数据时, 即使设置了 ``"validateOnChange": true,`` , 也只会验证第一次时候的数据

Open

#10,360 opened on May 31, 2024

View on GitHub
 (1 comment) (0 reactions) (0 assignees)TypeScript (2,268 forks)batch import
bughelp wantedneed confirm

Repository metrics

Stars
 (15,576 stars)
PR merge metrics
 (No merged PRs in 30d)

Description

描述问题:

validateApi 验证 联动数据 时, 即使设置了 "validateOnChange": true, , 也只会验证第一次时候的数据

截图或视频:

如何复现(请务必完整填写下面内容):

  1. 你是如何使用 amis 的?

amis + react

  1. amis 版本

3.5.2

  1. 粘贴有问题的完整 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, 但正常来说, 即使是联动改变数据也应该触发提交.

  1. 其他说明

这里使用 过滤器 而不是 表达式 是因为, 表达式传不进去参数, 官网只找到自定义过滤器的说明而无自定表达式的说明; 请问官方是否有这样的支持(自定义表达式).

Contributor guide