似乎有專門針對S3文件上傳的autoform附加軟件包(請參閱「文件」部分here),但由於您似乎將此用作學習機會,因此我會試着解釋我如何「 d用核心流星來做。
但是,首先,在我忘記之前,您的上傳模板是#autoForm
的孩子,但它自己的元素是form
。我認爲這將導致生成的HTML嵌套form
元素(這是否定的)。要解決這個問題,我會在{{> uploader}}
之前移動{{/autoForm}}
,併爲您的提交按鈕添加一個事件處理程序,使用$('#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}}
使用無功VAR設置URL當上載完成(在upload-to-amazon-s3某處):
template.data.urlVar.set(url);
我已創建a meteorpad證明是autoform
和S3範圍之外的基本思想。
你能縮小發生錯誤的位置嗎?例如,'storeUrlInDatabase'方法調用是成功還是失敗? –
另外,爲了幫助調試,不要'返回異常'。相反,拋出新的Meteor.Error('file-insert-failed',exception.toString())'。 –
因此沒有錯誤信息。讓我試着澄清一下:文件正確地上傳到S3,URL被添加到「文件」集合中。我可以在'Files'集合中插入一個對Doc._id(上傳的文件屬於哪個)的引用。而不是這樣做,我只想使用帶'URL'參數的'Documents'集合。這樣我就可以使用Autoform創建用戶界面,然後在「文檔」集合中插入所有內容。所以問題是如何將S3 URL導入到'Documents'URL參數中。相當微不足道......但卻盯着它看。 – wiwa1978