我用meteor-autoform
插入一个集合中的文档。 我的Items
有一个字段groupId
。 我怎样才能插入此组ID,当我提交我的项目形式。
<template name="itemForm">
{{#autoForm type="insert" collection=Collections.Items}}
{{> afQuickField name="name"}}
<div class="form-group">
<button type="submit" class="btn btn-primary">Add item</button>
<button type="reset" class="btn btn-default">Reset Form</button>
</div>
{{/autoForm}}
</template>
我可以创建一个包含我的组ID的另一个领域,但我不希望用户看到此字段。
我如何设置groupId
“幕后”?
对于这一点,你需要一个钩子 。 你也需要设置一个ID为形式,让我们说addItemForm
。
//Anywhere in your client code
Autoform.hooks({
addItemForm : {
onSubmit : function(doc) {
doc.groupId = /*Get the group id*/;
this.done(); //We've finished
return true; //Let autoForm do his default job now
}
}
});
我认为一个解决方案是不是这显示该选项用户。 您还需要添加optional:true
到现场,所以它仍然是有效的,当你提交表单。
然后用钩子,你应该能够添加任何你想要的其他数据
文件可在自动窗体挂钩
我通常修改了该文档before insert
AutoForm.hooks({
myFormId: {
before: {
insert: function(doc, template) {
//modify the document here
}
}
})
你可以使用doc=this
如果模板的数据上下文可用。
例如:
<template name="itemForm">
{{#autoForm id="insert-item-form" type="insert" collection=Collections.Items doc=this}}
{{> afQuickField name="name"}}
<div class="form-group">
<button type="submit" class="btn btn-primary">Add item</button>
<button type="reset" class="btn btn-default">Reset Form</button>
</div>
{{/autoForm}}
</template>
在进一步的结果是,你可以设置这将插入操作之前被触发钩:
var itemsHooks = {
before: {
insert: function (doc) {
doc.groupId = this.currentDoc._id;
return doc;
}
}
};
AutoForm.addHooks('insert-item-form', itemsHooks);