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()

但这并不是我所需要的:

如果 typestart,则必须有一个 item 值,如果 typestop 必须有一个 _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 甚至允许根据执行的操作(插入、更新)有条件地要求字段。

您可以在文档中阅读更多相关信息