【发布时间】:2013-10-29 19:56:22
【问题描述】:
给定以下主干形式架构 sn-p:
number_of_products: {
type: "Text",
title: "Number of products",
validators: ["required", "integer"]
},
如何定义验证器属性以将输入限制为13 和42 之间的值?
【问题讨论】:
标签: javascript validation backbone-forms
给定以下主干形式架构 sn-p:
number_of_products: {
type: "Text",
title: "Number of products",
validators: ["required", "integer"]
},
如何定义验证器属性以将输入限制为13 和42 之间的值?
【问题讨论】:
标签: javascript validation backbone-forms
首先,您可以将type 更改为Number,然后添加验证函数:
function validateNumber(min, max) {
return function(val) {
if (val < min || val > max) {
return {
type: 'invalid number',
message: 'Must be between '+min+' and '+max+'.'
};
}
};
}
...
number_of_products: {
type: "Number",
title: "Number of products",
validators: ["required", validateNumber(13, 42)]
}
【讨论】:
min 和max 传递给该函数,以便我可以将其重新用于其他Number 字段?
我认为创建验证器更可重用:
// interval validator
BackBoneForms.validators.interval = function(options) {
// get the min value
var minValue = parseFloat(options.min) || 0;
var maxValue = parseFloat(options.max) || 0;
var err = {
type: options.type,
message: "value must between "+minValue+" and "+maxValue
};
return function interval(value, attrs) {
var fieldValue = 0;
if (value === null || value === undefined || value === '') return err;
// check if the value is number
if( !isNaN(parseFloat(value)) && isFinite(value)) {
fieldValue = parseFloat(value);
}
if( minValue > fieldValue || maxValue < fieldValue ) {
return err;
}
return ;
}
}
您可以将其用作:
number_of_products: {
type: "Number",
title: "Number of products",
validators: ["required", {
type : "interval" ,
max : 10,
min : 0
}]
}
【讨论】: