我使用伟大的aldeed:MeteorJS autoform包。我有一个自定义表单,可以让我创建数据库条目。MeteorJS AutoForm.Hooks不更新文档
其中一个用户输入的表单字段是针对郊区的,我使用的是sergeyt:typeahead包,在用户输入时对此提出建议。
建议采用用户熟悉的格式(本质上是“郊区,州,邮编”)。我称之为长途郊区。
然后,我使用AutoForm挂钩之前从用户选择/输入的longsuburb值中分离出Zipcode(“邮编”)值和“郊区”值。然后钩子在提交之前将郊区和邮编值插入到文档中。
这一切都很好。
现在我想创建一个编辑表单,用户可以编辑详细信息(按照计划,我打算使用相同的表单来处理这两个表单,但由于我是新手,所以我一次只能执行一个步骤)。
我已经设置了一个编辑表单模板,并根据AutoForm示例将类型设置为“update”。
我可以成功编辑所有表单详细信息并将它们保存到集合中,但我的AutoForm挂钩似乎根本不会被调用,因此文档的“郊区”和“邮编”值保留提交时也是如此。
我已经尝试了几种不同的方法,但主要是在黑暗中拍摄,所以任何建议都会很棒。
这里的编辑表单模板
<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');
}
});
添加模板和代码都大致相同。正如我所说的,对于创建记录来说,这一切都很好。我还可以编辑名称,网址,longsuburb等,并将它们保存到数据库中。这只是插件不工作。
我已经更新了从“插入”到“更新”在JS钩和我在浏览器控制台以下错误:'[错误]类型错误: undefined不是一个对象(评估'suburbString.substring')' – SLRM