SimpleSchema:取决于值而不是可选值
SimpleSchema: Depending values instead of optional values
这是我的 SimpleSchema 验证的样子:
validate: new SimpleSchema({
type: { type: String, allowedValues: ['start', 'stop'] },
_id : { type: SimpleSchema.RegEx.Id, optional: true },
item: { type: String, optional: true }
}).validator()
但这并不是我所需要的:
如果 type
是 start,则必须有一个 item
值,如果 type
是 stop 必须有一个 _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 的 atmosphere 包,您可以将 return SimpleSchema.ErrorTypes.REQUIRED
替换为 return 'required'
。我仅使用 NPM 包 测试了上面的代码,两个版本都工作正常。
这是此功能的一个非常基本的实现。 SimpleSchema 甚至允许根据执行的操作(插入、更新)有条件地要求字段。
您可以在文档中阅读更多相关信息
这是我的 SimpleSchema 验证的样子:
validate: new SimpleSchema({
type: { type: String, allowedValues: ['start', 'stop'] },
_id : { type: SimpleSchema.RegEx.Id, optional: true },
item: { type: String, optional: true }
}).validator()
但这并不是我所需要的:
如果 type
是 start,则必须有一个 item
值,如果 type
是 stop 必须有一个 _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 的 atmosphere 包,您可以将 return SimpleSchema.ErrorTypes.REQUIRED
替换为 return 'required'
。我仅使用 NPM 包 测试了上面的代码,两个版本都工作正常。
这是此功能的一个非常基本的实现。 SimpleSchema 甚至允许根据执行的操作(插入、更新)有条件地要求字段。
您可以在文档中阅读更多相关信息