简单的架构和多种形式

时间:2016-02-22 00:49:16

标签: meteor simple-schema

我的用户个人资料架构看起来像这样:

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
});

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

2 个答案:

答案 0 :(得分:0)

通过使用选项optional: false,您在创建对象时必须使用它。

一种解决方案可能是myCollection.insert();使用标记validate: false而不是createUser()

e.g。

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

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

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

答案 1 :(得分:0)

您可以使用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