这是我的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

09-19 14:30