UniqueId для хука автоформы

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

В этом случае я создаю уникальный идентификатор, это форма вопросов и ответов, поэтому на одной странице может быть много форм вопросов. Я не уверен, как использовать uniqueId с AutoForm.addHooks(); все, что я пробовал на сегодняшний день, создает глобальные перехватчики автоформ, что не идеально, поскольку влияет на все другие формы на сайте.

Template.answers.helpers({
  makeUniqueID: function () {
      return "update-each-" + this._id;
  },
});

var hooksObject = {
    onSuccess: function(formType, result) {
        var collectionId = this.docId;

        Meteor.call('sendEmail',
            collectionId
            );
    },
};

var answerForm = "update-each-" + this._id;
AutoForm.addHooks('answerForm', hooksObject);

ОБНОВЛЕНИЕ

Путь: answer.js

var hooksObject = {
  onSuccess: function(formType, result) {
    var collectionId = this.docId;

    Meteor.call('sendEmail',
      collectionId
      );
  },
};

Template.answers.onCreated(function() {
  var self = this;
    self.autorun(function() {
        var id = FlowRouter.getParam('id');
        self.subscribe('answers', id);
    });
    this.formId = "update-each-" + this._id;
    console.log("oncreated: ", this.formId);

    AutoForm.addHooks(this.formId, hooksObject, true); 
});



Template.answers.helpers({
  answer: function() {
    return Answers.find({"userId": Meteor.userId()});
  },
  formId() {
   /**
    * expose the form id we set above to the template
    **/
      var test = Template.instance().formId;
      console.log("test: ", test);
      return Template.instance().formId;
   },
});

Путь: answer.html

{{#each answer}}
  {{#autoForm id=formId type="update" collection="Answers" doc=this}}
  {{> afQuickField name='answer'}}
    <button type="submit">Save changes</button>
  {{/autoForm}}
{{/each}}

person bp123    schedule 08.08.2016    source источник


Ответы (1)


Обновлено на основе новой информации из отзывов об обновленных сообщениях и комментариях. Ключом к этому решению является вызов AutoForm.addHooks внутри события onCreated вашего шаблона. В противном случае у вас не будет доступа к уникальному идентификатору:

answers.html

<template name="answers">
  {{#each answer}}
    {{> answerForm this }}
  {{/each}}
</template>

ответы.js

Template.answers.onCreated(function() {
  this.autorun(() => {
    var id = FlowRouter.getParam('id');
    this.subscribe('answers', id);
  });      
});

Template.answers.helpers({
  answer: function() {
    return Answers.find({"userId": Meteor.userId()});
  }
});

answer.html

<template name="answerForm">
  {{#autoForm id=formId type="update" collection="Answers" doc=this}}
    {{> afQuickField name='answer'}}
    <button type="submit">Save changes</button>
  {{/autoForm}}
</template>

answer.js

Template.answerForm.onCreated(function onCreated() {
  /**
   * The data._id field is passed in to your template as data
   **/
  this.formId = "update-each-" + this.data._id;

  /**
   * Call addHooks with the third option, true, to replace any existing hooks for this form.
   * This is because addHooks will run every time an instance of this template is created.
   **/
  AutoForm.addHooks(this.formId, hooksObject, true);

});

Template.answerForm.helpers({
  formId() {
    /**
     * expose the form id we set above to the template
     **/
    return Template.instance().formId;
  }
});
person Ashley Reid    schedule 09.08.2016
comment
Извиняюсь. this.formId = "update-each-" + this.data._id; не создает уникальный идентификатор для форм обновления. Я неправильно понимаю это? - person bp123; 10.08.2016
comment
Это предполагает, что поле _id передается в ваш шаблон как часть объекта данных, например, если в родительском шаблоне есть ссылка doc на документ Mongo для этой формы, тогда вы должны назвать свой шаблон ответов следующим образом: {{> answers doc}} doc просто должен быть объектом, содержащим поле _id, вот код, который я использовал при тестировании моего примера: Template.body.helpers({ doc() { return { _id: 'asd12312' }; } }); Вы захотите изменить его, чтобы использовать поле this._id, которое вы использовали в исходном примере. Вы не показали, где вы извлекали это поле. - person Ashley Reid; 10.08.2016
comment
Привет, Натан, чувствую себя немного застенчивым. Я все еще в тупике. Я обновил свой код, чтобы попытаться реализовать то, что вы предложили (см. Выше), не могли бы вы указать, где я ошибаюсь. Реально чувствую себя нубом. - person bp123; 11.08.2016
comment
Я обновил свой код на основе вашего ввода. Я думаю, что путаница возникает из-за того, что я не знаю, где вы получаете идентификатор формы. Это исходит от URL-адреса через FlowRouter.getParam('id')? - person Ashley Reid; 11.08.2016
comment
Идентификатор формы является идентификатором коллекции. FlowRouter.getParam('id') — это идентификатор пользователя. Это не связано с формой. - person bp123; 11.08.2016
comment
Ах, так _id происходит из документов в {{#each answer }} .. Я снова обновил пример; мое решение основано на том, что вы передаете эти данные в шаблон. Для этой цели я разделил ваш код на родительский и дочерний шаблоны. - person Ashley Reid; 11.08.2016
comment
Аааа, огромное спасибо. Теперь это работает. Так многому еще предстоит научиться. Я ценю всю помощь. - person bp123; 12.08.2016