我有一个Meteor应用程序,我在其中将文档(标题,描述,客户......)插入数据库。该应用程序使用Autoform,Simple Schema和Collection2。我现在想添加将文件上传到S3的可能性。
为了简单起见,我会将文件选择器作为“创建文档”的一部分呈现,一旦文件上传,URL字段(来自Autoform)应显示S3上文档的URL(一旦上传),当单击创建按钮时,URL最终存储在文档集合中。我意识到可能有更好的方法,但是现在想要保持简单。
我尝试合并教程here。上传到S3工作,但我无法获取上传文件存储文件集合的URL。下面的屏幕截图显示了布局。有任何想法吗?
我的当前代码可以找到here。
答案 0 :(得分:0)
似乎有专门针对S3文件上传的autoform附加软件包(请参阅“文件”部分here),但由于您似乎将此作为学习机会,我将尝试解释我是怎么用核心流星来做的。
但首先,在我忘记之前,您的上传器模板是#autoForm
的孩子,但拥有自己的form
元素。我认为这将导致生成的HTML具有嵌套的form
元素(这是禁忌)。要解决此问题,我会在{{/autoForm}}
之前移动{{> uploader}}
,并为使用$('#documentForm').submit()
提交表单的提交按钮添加事件处理程序。注意:我没有测试过。
现在,谈谈你的实际问题。您实际上是在询问如何从嵌套模板(uploader
模板)中的事件修改模板中的某些内容(url字段的值)。我这样做如下:
创建父模板的实例时,请附加一个ReactiveVar
,其中包含上传文件的URL。
Template.adminDocumentNew.onCreated(function () {
this.url = new ReactiveVar();
});
提供帮助以获取反应变量。
Template.adminDocumentNew.helpers({
url: function () {
return Template.instance().url;
}
});
使用帮助器在表单中设置值。
{{> afQuickField name='url' value=url.get}}
将反应性var作为数据上下文传递给上传者模板:
{{> uploader urlVar=url}}
使用active var在上传完成时设置网址(upload-to-amazon-s3中的某处):
template.data.urlVar.set(url);
我创建了a meteorpad,展示了autoform
和S3背景之外的基本概念。