1

我用来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“幕后”?

4

3 回答 3

1

为此,您需要一个 hook。您还需要为表单设置一个 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
    }
  }
});
于 2014-12-17T10:05:37.377 回答
1

我认为一种解决方案不是向用户显示此选项。您还需要添加optional:true到该字段,因此在您提交表单时它仍然有效。

然后使用钩子,您应该能够添加您想要的任何其他数据

Doc 是autoform 上可用的钩子

我通常修改文档before insert

AutoForm.hooks({
  myFormId: {
    before: {
      insert: function(doc, template) {
        //modify the document here
      }
    }
})
于 2014-12-17T10:09:31.623 回答
0

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);
于 2015-10-08T16:15:49.240 回答