我正在对某些字段进行自己的自定义验证,因此只接受某些值(取决于字段),其余值被拒绝。我想写一个“过滤器”函数,它检查称为验证的属性,并从那里决定允许使用哪个单词。所以模型看起来像这样:
module.exports = {
types: {
filter: function(attribute) {
if (attribute === 'number') {
switch(attribute.value) {
case 'one':
return true;
case 'two':
return true;
default:
return false;
}
} else if (attribute === 'color') {
switch(attribute.value) {
case 'red':
return true;
case 'blue':
return true;
default:
return false;
}
}
},
},
attributes: {
number: {
type: 'string',
required: true,
filter: true
},
color: {
type: 'string',
required: true,
filter: true
}
}
};
当然,在正常的Sails.js行为中,“attribute
”不是属性,而是属性的值。(而attribute.value
只是一个例如,意思是,我想要那里的属性值。
所以,我希望attribute
成为调用验证规则的实际属性。 Sails有可能吗?我的意思是,我可以为模型中的每个字段编写一个函数,但是有一个适合所有字段的函数会很好(我有很多)。 / p>
感谢。
答案 0 :(得分:1)
好的,我会回答你的问题,但这可能不是你想要的。属性可以有一个“枚举”,这就是我们实现最终目标的方式:
attributes: {
state: {
type: 'string',
enum: ['pending', 'approved', 'denied']
}
}
但是我会假设这段代码只是一个人为的例子。这是我认为可行的方式。
module.exports = {
types: {
filter: function(attribute) {
if (attribute === 'number') {
switch(attribute.value) {
case 'one':
return true;
case 'two':
return true;
default:
this.validationErrors.push(attribute);
return false;
}
} else if (attribute === 'color') {
switch(attribute.value) {
case 'red':
return true;
case 'blue':
return true;
default:
this.validationErrors.push(attribute);
return false;
}
}
},
},
attributes: {
validationErrors:(function(){
var errors = [];
return {
push:function(attr){
errors.push(attr);
},
get:function(){
return errors;
}
};
})(),
number: {
type: 'string',
required: true,
filter: true
},
color: {
type: 'string',
required: true,
filter: true
}
}
};
编辑:使用属性方法而不是属性
这个答案可能有几个问题。我不确定waterline如何在这些自定义类型函数中处理“this”。 “这个”是否与模型有关?或者我们正在创建的模型实例?这里有很多问题要问,但也许这可以给你一些想法并创建一个讨论。