simple-schema / AutoForm集合中的用户特定字段插入[Meteor]

时间:2015-02-03 22:41:02

标签: javascript mongodb meteor meteorite

我使用简单模式和quickForm来允许用户将文档保存到我的集合中,但我想添加Meteor.userId()Meteor.user().username字段,最终只返回特定于当前用户的数据。由于quickForms不显示其insert()方法,因此我不确定在哪里添加字段。

以下是我用来允许用户将Speakers保留到集合的模式。

    Speakers = new Meteor.Collection('speakers');

    Speakers.attachSchema(new SimpleSchema({
            first: {
                type: String,
                label: "first name",
                max: 200
            },

            last: {
                type: String,
                label: "last name",
                max: 200
            },

            date: {
                type: Date,
                label: 'date',
                optional: true
            }
    }));

3 个答案:

答案 0 :(得分:1)

我不确定我是否正确理解你,但为什么不

Speakers.attachSchema(new SimpleSchema({
        first: {
            type: String,
            label: "first name",
            max: 200
        },

        last: {
            type: String,
            label: "last name",
            max: 200
        },

        date: {
            type: Date,
            label: 'date',
            optional: true
        },
        userId: {
            type: String
        }
}));

如果您想根据插入记录的用户自动填写

,请使用autovalue

要使用quickForm而不显示userId字段,您可以执行以下操作

{{> quickForm collection="Speakers" id="speakerForm" type="insert" omitFields="userId"}}

答案 1 :(得分:1)

如果你想省略输入表格中的一些字段并自己用值填充这些字段,你可以使用带有前挂钩的afQuickField。

首先,将userId和username字段添加到架构中。

{{#autoForm collection=speakerCollection id="speakerForm" type="insert"}}
    {{> afQuickField name="first"}}
    {{> afQuickField name="last"}}
    {{> afQuickField name="date"}}
<div>
<button type="submit" class="btn btn-primary">Submit</button>
<button type="reset" class="btn btn-default">Reset</button>
</div>
{{/autoForm}}

您需要添加一个助手来返回speakerCollection

Template.registerHelper("speakerCollection", Speakers);

然后添加一个before hook来添加userId:

AutoForm.hooks({
  speakerForm: {
    before: {
      "insert": function (doc) {
        doc.userId = Meteor.userId();
        return doc;
      },
    }
});

答案 2 :(得分:0)

您可以使用autoValue来定义自动插入的值:

Speakers = new Meteor.Collection('speakers');

Speakers.attachSchema(new SimpleSchema({
    userId: {
        type: String,
        autoValue: function() {
            return Meteor.user()._id;
        }
    },
    author: {
        type: String,
        autoValue: function() {
            return Meteor.user().username;
        }
    },
}));

如果您想省略autoform中的某些字段,可以设置autoform.omit = true

userId: {
    type: String,
    autoValue: function() {
        return Meteor.user()._id;
    },

    // omit the userId field in autoform forms
    autoform: {
        omit: true
    }
}