带有计算消息的 parsleyjs 自定义验证器
parsleyjs custom validator with computed message
我有一组预定义规则,其中加载了来自外部资源的 rest 调用。
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 如何在此设置中使用我的计算消息?
您可以 return 失败的承诺,而不是 true
或 false
,参数是错误消息。
return $.Deferred().reject('Custom error message')
如果有人关心这里的不同解决方案,我会这样做。
如果出现验证错误,请在 "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
}
});
我有一组预定义规则,其中加载了来自外部资源的 rest 调用。
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 如何在此设置中使用我的计算消息?
您可以 return 失败的承诺,而不是 true
或 false
,参数是错误消息。
return $.Deferred().reject('Custom error message')
如果有人关心这里的不同解决方案,我会这样做。
如果出现验证错误,请在 "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
}
});