这是我的SimpleSchema验证的样子:
validate: new SimpleSchema({
type: { type: String, allowedValues: ['start', 'stop'] },
_id : { type: SimpleSchema.RegEx.Id, optional: true },
item: { type: String, optional: true }
}).validator()
但这并不是我真正需要的:
如果
type
开始,则必须有一个item
值,如果type
停止,则必须有一个_id
值。 最佳答案
您可以通过如下更改代码来实现
validate: new SimpleSchema({
type: { type: String, allowedValues: ['start', 'stop'] },
_id : {
type: SimpleSchema.RegEx.Id,
optional: true,
custom: function () {
if (this.field('type').value == 'stop') {
return SimpleSchema.ErrorTypes.REQUIRED
}
}
},
item: {
type: String,
optional: true,
custom: function () {
if (this.field('type').value == 'start') {
if(!this.isSet || this.value === null || this.value === "") {
return SimpleSchema.ErrorTypes.REQUIRED
}
}
}
}
}).validator()
如果使用SimpleSchema大气包,则可以将
return SimpleSchema.ErrorTypes.REQUIRED
替换为return 'required'
。我仅使用NPM软件包测试了上面的代码,并且两个版本都能正常工作。这是此功能的非常基本的实现。 SimpleSchema甚至允许根据执行的操作(插入,更新)有条件地要求字段。
您可以在文档中阅读有关它的更多信息
如果您使用旧的气氛套餐
https://github.com/aldeed/meteor-simple-schema#make-a-field-conditionally-required
如果您使用新的NPM软件包https://github.com/aldeed/node-simple-schema#make-a-field-conditionally-required