【问题标题】:Simple Schema and multiple forms简单的模式和多种形式
【发布时间】:2016-05-26 04:51:35
【问题描述】:

我有一个看起来像这样的用户配置文件架构:

Schema.UserProfile = new SimpleSchema({
    name: {
        type: String,
        optional: false
    },
    gender: {
        type: String,
        optional: false,
        allowedValues: ['Male', 'Female']
    },
    location: {
        type: String,
        optional: false
    },
    age: {
        type: Number,
        optional: false
    }
}

我的注册表要求用户在上面选择他们的性别。注册后,用户会看到另一个表单来填写其余数据:姓名、位置和年龄。

问题是:当用户尝试注册时,我收到错误:Name is required。用户在注册之前不得输入他们的姓名。

仅验证实际保存在特定表单上的数据的正确方法是什么?

编辑

这是我的注册脚本:

var data = {};
var profile = {};
data.email = $('#email').val();
data.password = $('#password').val();
profile.gender = $('#gender').val();
data.profile = profile;

Accounts.createUser(data, function (error) {
   // do
   // ERROR: Name is required
});

当用户实际注册时,他们会看到一个表单来填写其他数据。表单提交会调用一个尝试更新配置文件对象的方法。

【问题讨论】:

  • 你能发布你的更新代码吗?
  • 您查看我对您其他问题的回答了吗?如果可行的话,我认为同样的事情也适用于此。
  • @StephenWoods 我删除了这个问题,因为它似乎是这个问题的副本。话虽这么说,我读了你的回答,但它似乎并没有帮助我解决这个具体问题。

标签: meteor simple-schema


【解决方案1】:

通过使用选项optional: false,您可以在创建对象时强制使用它。

一种解决方案是使用带有标志validate: falsemyCollection.insert(); 而不是createUser()

例如

myCollection.insert(doc, {validate: false});

这不会触发错误,因为正在跳过验证。

我个人不会使用这种方式,但它可能是一个解决方案。

【讨论】:

    【解决方案2】:

    您可以使用 SimpleSchema 的 pick 命令从架构中选择某些元素。这样,您就可以从相同的原始架构定义派生多个架构。

    Schemas.UserProfileRegistration1 = Schemas.UserProfile.pick(['gender']);
    
    Schemas.UserProfileRegistration2 = Schemas.UserProfile.pick(['name', 'location', 'age']);
    

    https://github.com/aldeed/meteor-simple-schema#extracting-simpleschemas

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多