Я использую большой пакет aldeed: autoform для MeteorJS. У меня есть пользовательская форма, которая позволяет мне создавать записи db.MeteorJS AutoForm.Hooks не обновляет doc
Одно из введенных пользователем полей формы для Suburb, и я использую пакет sergeyt: typeahead, чтобы вносить предложения по этому типу пользователя.
Предложения в формате, который знаком пользователям (по существу, это «пригород, ГОСУДАРСТВЕННЫЙ, почтовый индекс»). Я называю это longsuburb.
Я использую AutoForm перед подключением, чтобы разделить значение Zipcode («почтовый индекс») и значение «пригород» от выбранного пользователем/введенного значения longsuburb. Крючок затем вставляет значения пригорода и почтового индекса в документ до его отправки.
Все это отлично работает.
Теперь я хочу создать форму редактирования, в которой пользователь может редактировать детали (по линии я планирую использовать ту же форму для обоих, но для меня это один шаг за раз, поскольку я новичок).
Я создал шаблон формы редактирования и установил тип «обновление» в соответствии с примерами AutoForm.
Я могу успешно редактировать все детали формы, и они сохраняются в коллекции, за исключением того, что мой крюк AutoForm, похоже, вообще не вызван, поэтому значения «пригород» и «почтовый индекс» для документа остаются такой же на submit.
Я пробовал несколько разных подходов, но в основном снимаю в темноте, поэтому любой совет будет замечательным.
Вот шаблону формы редактирования
<template name="editBar">
{{#autoForm collection="Bars" id="editBarsForm" template="bootstrap3-horizontal" label-class="col-sm-3" input-col-class="col-sm-9" type="update" doc=this}}
<fieldset>
<legend>Edit Bar</legend>
{{> afQuickField name='bar_name' placeholder="Name of the Bar, Pub, Venue" class="form-control typeahead" }}
{{> afQuickField name='image' class="form-control typeahead" }}
{{> afQuickField name='url' placeholder="Venue's Website" class="form-control typeahead" }}
{{> afQuickField name='longsuburb' placeholder="Suburb" class="form-control typeahead" autocomplete="off" spellcheck="off" data-source="getSuburbs"}}
{{> afQuickField name='barType' options=bartypes class="selectpicker"}}
</fieldset>
<button type="submit" class="btn btn-primary submit">Submit</button>
<a class="btn btn-danger delete" href="#">Delete post</a>
<a class="btn btn-default cancel" href="#">Cancel</a>
{{/autoForm}}
</template>
И вот что у меня есть в файле Редактировать форму JS
Template.editBar.helpers({
getSuburbs: function() {
return AuPostcodes.find().fetch().map(function(it){ return it.longsuburb; });
console.log('it');
},
bartypes: function() {
return [
{label: "Select", value: ""},
{label: "Bar", value: "bar"},
{label: "Pub", value: "pub"}
];
}
});
Template.editBar.rendered = function(){
Meteor.typeahead.inject();
};
//Split out suburb and postcide from form's longsuburb string and submit with doc to Bars collection.
//"suburb" currently used for filtering.
AutoForm.hooks({
editBarsForm: {
before:{
insert: function(doc) {
var suburbString = doc.longsuburb;
var postcode = suburbString.substring(suburbString.lastIndexOf(",")+2,suburbString.length);
var suburb = suburbString.substring(0,suburbString.indexOf(","));
doc.postcode = postcode;
doc.suburb = suburb;
return doc; //autoFrom magic commence
}
}
}
});
Template.editBar.events({
'click .delete': function(e) {
e.preventDefault();
if (confirm("Delete this bar?")) {
var currentBarId = this._id;
Bars.remove(currentBarId);
Router.go('barsList');
}
},
'click .cancel': function(e) {
e.preventDefault();
Router.go('barsList');
}
});
шаблон, добавить и код в основном одинаковы. Как я уже сказал, все хорошо работает для создания записи. Я также могу редактировать имя, url, longsuburb и т. Д., И они сохраняются в БД. Это только вкладка doc, которая не работает.
Я обновил крюк в JS из «вставки» к «обновлению», и я получаю следующее сообщение об ошибке в консоли браузера: '[Error] Ошибка типа: undefined не является объектом (оценка «suburbString.substring») ' – SLRM