我想使用autoform将新文档插入db。 Autoform hook在服务器上调用meteor方法来插入文档。
我在模板中有这个...
{{#autoForm collection="Reports" id="addReport" type="insert"}}
<div class="row">
<div class="col s6">
{{> afQuickField name='hours'}}
</div>
</div>
<button class="btn waves-effect waves-light modal-action modal-close"><i class="material-icons">save</i></button>
{{/autoForm}}
则...
AutoForm.hooks({
addReport: {
onSubmit: function(insertDoc) {
Meteor.call('addReport', insertDoc, function(error, result) {
if (error) alert(error.reason);
});
return false;
}
}
});
然后是服务器上的方法......
Meteor.methods({
addReport: function(insertDoc) {
var report = _.extend(insertDoc, {
userId: Meteor.userId(),
});
return Reports.insert(report);
}
});
我在集合中有createdAt
和updatedAt
个字段,但它们都有autoValue因此,我认为不需要从客户端或流星方法中插入。
因此,使用模式的集合如下所示:
Reports = new Meteor.Collection('reports');
Reports.attachSchema(new SimpleSchema({
hours: {
type: Number,
label: "Number of hours",
decimal: true
},
createdAt: {
type: Date,
label: "Created Date",
autoValue: function() {
if (this.isInsert) {
return new Date;
} else {
this.unset();
}
},
denyUpdate: true
},
updatedAt: {
type: Date,
autoValue: function() {
if (this.isUpdate) {
return new Date()
}
},
denyInsert: true,
optional: true
},
"userId": {
type: String,
autoform: {
type: "hidden",
}
},
}));
当我运行meteor时,表单显示,但提交什么都不做。没有视觉提示是否有任何错误。客户端和服务器控制台中都没有错误消息。
我做错了什么或错过了什么?
答案 0 :(得分:2)
aldeed / meteor-autoform文档:
// Called when form does not have a `type` attribute
onSubmit: function(insertDoc, updateDoc, currentDoc) {
Meteor.call()...
}
我正在关注discovermeteor书,我正在尝试使用本书的一些方法,但使用meteor-autoform包。
post_submit.html
<template name="postSubmit">
{{#autoForm collection="Posts" id="insertPost"}} <-- no type
<div class="form-group">
<div class="controls">
{{> afQuickField name='title' class='title form-control'}}
</div>
</div>
<div class="form-group">
<div class="controls">
{{> afQuickField name='description' class='description form-control'}}
</div>
</div>
<input id="send" type="submit" value="Send" class="btn btn-primary"/>
{{/autoForm}}
</template>
post_submit.js
var postSubmitHook = {
onSubmit: function(insertDoc){
Meteor.call('postInsert', insertDoc, function(error, result) {
if (error){
Bert.alert(error.reason, 'danger', 'growl-top-right');
$('#send').removeAttr('disabled');
return;
}
Router.go('postPage', {_id: result._id});
});
return false;
}
};
AutoForm.addHooks('insertPost', postSubmitHook);
答案 1 :(得分:2)
由于@Cristo GQ
说得对,我只是想确保答案对于此线程的未来访问者来说足够清楚
onSubmit
挂钩将仅用于 用于 type='normal'
或而不包含任何< / strong> type=
另一方面,before.insert
挂钩仅适用于type='insert'
并且没有before.normal
挂钩
这意味着当使用onSubmit
hook 时,我们必须在工作之前做任何事情&#34;&#34; (比如在onSubmit
本身内添加 currentUser )。