我正在使用Autoform和Slingshot进行S3交互。当用户提交表单时,我想拦截进程,通过Slingshot将文件上传到S3,使用返回的doc
扩展downloadUrl
对象,然后返回新的更新文档,并继续自动化过程
我有以下代码:
{{#autoForm collection="Tabs" id="newTabForm" type="method" meteormethod="createTab"}}
...
<div class="modal-body">
<fieldset>
{{> afFormGroup name='downloadUrl' type='file' class='file-bag'}}
...
AutoForm.hooks({
newTabForm: {
before: {
insert: function(doc, template) {
console.log(doc);
var file = $('.file-bag')[0].files[0];
var self = this;
uploader.send(file, function(error, downloadUrl) {
if (error) { throw new Meteor.Error(error); }
doc = _.extend(doc, { downloadUrl: downloadUrl });
self.result(doc);
});
}
},
....
Meteor.methods({
createTab: function(doc) {
check(doc, TabSchema);
var priceInCents = doc.price * 100;
var extraTabAttributes = {
userId: Meteor.userId(),
price: priceInCents
};
_.extend(doc, extraTabAttributes);
Tabs.insert(doc, function(error, result) {
if (error) { return error; }
});
}
在文档上正确存储url(但看起来很奇怪,C:// fakepath / filename ..),但无法将其上传到S3服务器
另外的问题是,为什么前钩子中的console.log(doc);
不会将任何内容记录到客户端/服务器上?
答案 0 :(得分:3)
我不熟悉自动表单,但我认为你的挂钩不正确。
来自https://github.com/aldeed/meteor-autoform#callbackshooks,它说
before: {
// Replace `formType` with the form `type` attribute to which this hook applies
formType: function(doc) {}
}
所以在你的情况下,
insert: function(doc, template)
应替换为
method: function(doc, template)