2016-08-08 4 views
1

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

В этом случае я создаю uniqueId, это форма Q &. На одной странице может быть много форм вопросов. Я не уверен, как использовать 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); 

UPDATE

Путь: 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}} 

ответ

2

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

answers.html

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

answers.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; 
    } 
}); 
+0

Спасибо большое за это. Отлично работает! – bp123

+0

Извините. 'this.formId =" update-each- "+ this.data._id;' похоже, не создает уникальный идентификатор для форм обновления. Неужели я не понимаю этого? – bp123

+1

Это предполагает, что поле '_id' передается в ваш шаблон как часть объекта данных, например, если родительский шаблон имел ссылку' doc' в Mongo-документ для этой формы, то вы бы назвали ваш шаблон ответов, как поэтому: '{{> отвечает doc}}' 'doc' просто должен быть объект, содержащий поле _id, вот код, который я использовал при тестировании моего примера: ' Template.body.helpers ({ doc() { return {_id: 'asd12312'}; } }); ' Вы должны изменить это, чтобы использовать поле' this._id', которое вы использовали в исходном примере. Вы не указали, где вы извлекаете это поле. –

Смежные вопросы