parsleyjs带有计算消息的自定义验证器

问题描述 投票:0回答:2

我有一组预定义的规则,它们从外部资源加载了一个休息调用。

rules.yaml

rules:
  firstname:
    rule: value.length <= params.max
    message: Bitte geben Sie nicht mehr als {{params.max}} Zeichen ein
    params:
      max: 20
  lastname:
    rule: value.length <= params.max
    message: Bitte geben Sie nicht mehr als {{params.max}} Zeichen ein
    params:
      max: 30

然后我写了一个这样的自定义验证器:

window.Parsley.addValidator('rules', {
    rules: rules,
    validateString: function (value, requirement) {
        let constraint = rules[requirement];
        if (constraint) {
            let params = constraint.params;
            if (constraint.message) {
                let errorMessage = Mustache.render(constraint.message, {params: params, value: value});
            }
            return !value || eval(constraint.rule);
        } else {
            console.log('Invalid constraint: $requirement could not be found inside $rules');
            return false;
        }
    },
    requirementType: 'string',
    messages: {
        en: 'The string ist invalid %s.',
        fr: 'Ce nombre n\'est pas un multiple de %s.'
    }
});

验证按预期工作。但正如您所看到的,错误消息是在验证期间动态计算的。 Parsley如何在此设置中使用我的计算消息?

validation parsley.js parsley
2个回答
1
投票

而不是truefalse,您可以返回失败的promise,其中参数是错误消息。

return $.Deferred().reject('Custom error message')

0
投票

如果有人关心不同的解决方案,我会怎么做。

如果出现验证错误,请在“validateString”方法中手动添加消息(多语言情况下的消息)。

window.Parsley.addValidator('myCustomValidator', {
    validateString: function (value, requirement) {
        let isValid = false;
        // define dynamic messages
        window.Parsley.addMessage('de', 'myCustomValidator', 'Das ist ein Fehler');
        window.Parsley.addMessage('en', 'myCustomValidator', 'This is an error');

        if (isValid == true) {
            return true;
        } else {
            return false;
        }
    },
    requirementType: 'string',
    messages: {
        // leave blank since the messages get defined dynamically inside parseString method
    }
});
© www.soinside.com 2019 - 2024. All rights reserved.