我正在学习流星的绳索,有点迷失在这里。我正在使用collections2,autoform来构建我的应用程序。我想将该集合与用户ID信息一起存储。因此,当我们从服务器检索集合时,我想只显示用户创建的集合而不是其他所有集合。这是架构。
ExercisesSchema = new SimpleSchema({
"name": {
type: String,
label: 'Name'
},
"workout.$.weight": {
type: String,
label: 'Weight'
},
"workout.$.reps": {
type: String,
label: 'Reps'
},
"notes": {
type: String,
label: 'Notes',
optional: true
}
});
在服务器端我只想显示用户创建的锻炼
Meteor.publish('exercises', function () {
return Exercises.find({owner: this.userId});
});
当我将用户ID添加到模式时,它会显示在autoform中,我不知道如何隐藏它,如果我隐藏它,那么我可以在autoform中使用钩子来添加值吗?
答案 0 :(得分:5)
在架构中,您可以将ownerId定义为类型:" hidden"
<强> schema.js 强>
ExercisesSchema = new SimpleSchema({
"name": {
type: String,
label: 'Name'
},
"ownerId": {
type: String,
autoform: {
type: "hidden",
}
},
"workout": {
//not sure if you need this, you didn't have it in your
type: [Object],
defaultValue: []
},
"workout.$.weight": {
type: String,
label: 'Weight'
},
"workout.$.reps": {
type: String,
label: 'Reps'
},
"notes": {
type: String,
label: 'Notes',
optional: true
}
});
如你所说,用钩子填充它。
<强> autoFormHooks.js 强>
AutoForm.hooks({
exerciseForm: {
formToDoc: function(doc) {
doc.ownerId = Meteor.userId();
return doc
},
}
});
使用钩子的另一种方法是在autoForm中为要在doc中设置的每个字段使用quickFields,包括ownerId。使用此解决方案,您可以将ownerId的value
设置为currentUser
。
{{#autoForm collection="Exercises" id="exerciseForm" type="insert"}}
<fieldset>
<legend>Add an Exercise</legend>
{{> afQuickField name='name'}}
{{> afQuickField name='notes'}}
{{> afQuickField name='ownerId' value=currentUserId}}
{{> afQuickField name='workout'}}
</fieldset>
<button type="submit" class="btn btn-primary">Insert</button>
{{/autoForm}}
<强> template.js 强>
Template.formTemplate.helpers({
currentUserId: function () {
return Meteor.userId();
}
});
答案 1 :(得分:0)
你可以尝试before
钩子方法:
ExercisesSchema = new SimpleSchema({
...
"ownerId": {
type: String,
autoform: {
type: "hidden",
}
},
...
});
在你的模板中:
{{#autoForm collection="Exercises" id="exerciseForm" type="insert"}}
<fieldset>
<legend>Add an Exercise</legend>
{{> afQuickField name='name'}}
{{> afQuickField name='notes'}}
<!-- Notice I've removed the ownerId from here. Will be added before saving to collection -->
{{> afQuickField name='workout'}}
</fieldset>
<button type="submit" class="btn btn-primary">Insert</button>
{{/autoForm}}
然后是您的autoform.js
var addUserHook = {
before: {
insert: function(doc) {
if(Meteor.userId()){
doc.ownerId = Meteor.userId();
}
return doc;
}
}
}
AutoForm.addHooks('exerciseForm', addUserHook);
上面添加了ownerId,就在即将保存到集合时。
如atmospherejs.com/aldeed/autoform上的文档中所述:
例如,您可能希望将当前用户的ID添加到 插入之前的文档。您可以使用“之前”,“formToDoc”或 “formToModifier”可以做到这一点。