:::danger 自定义校验从 RenderEngine 5.3.0 版本开始支持 :::
function validateRule(value) {if (value > 20) {return true;}return false;}
value: 当前表单的值。
function validateRule(value, state, ctx) {const preVal = ctx.store.get('fieldId').getVal();if (preVal > value) {return true;}return false;}
value: 当前表单的值。
state: 当前表单的 state。
ctx: 渲染引擎上下文
返回值 必须是 true or false。
多错误输出校验
多错误输出校验需要使用 state.invokeValidate 这个 API.
function validateRule(value, state, ctx) {const preVal = ctx.store.get('fieldIdPre').getVal();if (preVal > value) {state.invokeValidate(false, '错误信息1');return false;}const nextVal = ctx.store.get('fieldIdNext').getVal();if (nextVal > value) {state.invokeValidate(false, '错误信息2');return false;}return true;}
自定义异步校验
自定义异步校验需要使用 state.invokeValidate 这个 API.
function validateRule(value, state, ctx) {const preVal = ctx.store.get('fieldId').getVal();ctx.dp.fetch({url: 'url',data: { value },}).then((content) => {if (content.result) {state.invokeValidate(true, '');} else {state.invokeValidate(false, '错误信息');}});return true;}
注意:由于校验是异步的,当你使用 form.getData() 时拿到的验证结果是不准确的,当你有异步校验时,需要在调用 form.getData() 前先执行下你的异步校验,通过后再调用 form.getData()。
具体实现,可将异步校验封装成一个通用的 action
export function validateAsync(ctx) {return new Promise((resolve, reject) => {ctx.dp.fetch({url: 'url',data: { value },}).then((content) => {if (content.result) {resolve(content)} else {reject(content)}});});}
在自定义校验回调和提交数据时分别调用
function validateRule(value, state, ctx) { // 自定义校验回调const preVal = ctx.store.get('fieldId').getVal();ctx.execAction('validateAsync').then((content) => {if (content.result) {state.invokeValidate(true, '');} else {state.invokeValidate(false, '错误信息');}});return true;}
function formSubmit(value, state, ctx) { // 提交数据const preVal = ctx.store.get('fieldId').getVal();ctx.execAction('validateAsync').then((content) => {if (content.result) {cosnt data = ctx.store.getForm().getData();if (data.success) {// 提交数据到后台}} else {state.invokeValidate(false, '错误信息');}});}
