3

我有一个带有以下字段的 Meteor AutoForm 集合模式,我正在努力使其独一无二。它不允许在相同的情况下使用相同的值,但是当我更改值的大小写时,值会被插入,那么如何防止插入具有不同大小写的重复值?

Test, TEST,TesT都具有相同的咒语,所以它不应该被插入。

我试过这个:

Schemas.Organisation = new SimpleSchema({
    company: {
        type: String,
        max: 200,
        unique: true,
        autoValue: function () {
            if (this.isSet && typeof this.value === "string") {
                return this.value.toLowerCase();
            }
        },
        autoform:{
            label: false,
            afFieldInput: {
                placeholder: "Enter Company Name",
            }
        }
    }
  })

但它不允许我插入重复的值,而是在保存在数据库中时转换为全部小写。那么如何保存用户输入的值,但值不应该具有相同的拼写?

4

1 回答 1

1

这可以通过使用自定义客户端验证来实现。如果您不想将Organisation集合中的所有文档发布给每个客户端,则可以使用异步验证方法,例如:

Organisations = new Mongo.Collection("organisations");

Organisations.attachSchema(new SimpleSchema({
    company: {
        type: String,
        max: 200,
        unique: true,
        custom: function() {
            if (Meteor.isClient && this.isSet) {
                Meteor.call("isCompanyUnique", this.value, function(error, result) {
                    if (!result) {
                        Organisations.simpleSchema().namedContext("insertCompanyForm").addInvalidKeys([{
                            name: "company",
                            type: "notUnique"
                        }]);
                    }
                });
            }
        },
        autoValue: function() {
            if (this.isSet && typeof this.value === "string") {
                return this.value.toLowerCase();
            }
        },
        autoform: {
            label: false,
            afFieldInput: {
                placeholder: "Enter Company Name",
            }
        }
    }
}));

if (Meteor.isServer) {
  Meteor.methods({
    isCompanyUnique: function(companyName) {
      return Organisations.find({
        company: companyName.toUpperCase()
      }).count() === 0;
    }
  });
}

<body>
  {{> quickForm collection="Organisations" id="insertCompanyForm" type="insert"}}
</body>

这是一个MeteorPad

于 2016-01-23T21:43:40.873 回答