Как добавить связь или ссылку с AutoForm в Meteor?

Я использую meteor-autoform для вставки документов в коллекцию. В моем Items есть поле groupId. Как я могу вставить этот идентификатор группы при отправке формы элемента.

<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>

Я мог бы создать еще одно поле, содержащее идентификатор моей группы, но я не хочу, чтобы пользователь видел это поле.

Как я могу установить groupId "за кулисами"?


person Jamgreen    schedule 17.12.2014    source источник
comment
в вашем поле вы можете добавить autoform: {omit: true}, чтобы скрыть поле в форме   -  person Mustafa    schedule 28.03.2015


Ответы (3)


Для этого вам понадобится крючок. Также вам нужно установить идентификатор для формы, скажем, 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
    }
  }
});
person Kyll    schedule 17.12.2014
comment
Прохладно. Как получить id группы? Прямо сейчас я получаю идентификатор с this.params._id внутри Router.route('/group/:_id', {}); - person Jamgreen; 17.12.2014
comment
Если ваш groupId уникален, вы можете передать его в глобальной переменной. Другой вариант - установить его на сервере... Или, чтобы обеспечить лучший контроль, вы можете использовать метод с вашей формой. См. тип здесь. - person Kyll; 17.12.2014

Я думаю, что одно из решений заключается не в том, чтобы отображать эту опцию для пользователя. Вам также нужно добавить optional:true в поле, чтобы оно по-прежнему было действительным при отправке формы.

Затем, используя хуки, вы сможете добавить любые другие данные, которые хотите.

Доступен документ хуки на автоформе

Обычно я изменяю документ на before insert

AutoForm.hooks({
  myFormId: {
    before: {
      insert: function(doc, template) {
        //modify the document here
      }
    }
})
person Nicolas Grenié    schedule 17.12.2014

Вы можете использовать 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);
person Matthias A. Eckhart    schedule 08.10.2015