0

所以到目前为止,我对 Collection2/Simple Schema 的体验充其量只是基本的。现在,我正在尝试根据 Type 集合中的文档验证“类型”的值。

@Data = new Mongo.Collection 'data'
Data.attachSchema new SimpleSchema
    'types':
        'type': [String]
        'label': 'Types'
        'custom': ->
            if @isSet
                Meteor.call 'isType', @value, (error, result) ->
                    if !result
                        Data.simpleSchema().namedContext('admin_update').addInvalidKeys [
                            'name': 'types'
                            'type': 'notAllowed'
                        ]
    'otherField':
        'type': Number
        'label': 'Other Field'
        'optional': true

到目前为止,我的 isType 方法一直在正确地验证值,但是无论它返回 true 还是 false,它都会存储该值(即使表单会短暂地闪烁错误消息)。我认为我没有很好地掌握自定义验证来弄清楚如何正确地做到这一点,所以任何和所有的帮助都会受到赞赏,即使它只是把我推向正确的方向。

4

1 回答 1

0

您可以使用该allowedValues字段,该字段可以采用数组或函数。使用一个函数。

MyCollection.attachSchema(new SimpleSchema({
  types: {
    type: [String],
    allowedValues: function () {
      // assuming "Types" is the collection.
      return Types.find().map(function (doc) {
        return doc._id;
      });
    }
  }
}));

这会在后端进行验证,因此发布和订阅不会成为问题。

于 2015-07-07T11:16:36.970 回答