我的应用程序允许用户管理他们的文档。创建文件时,用户必须手动输入文档内容或从他们的计算机中选择一个文件(这将为用户将许多格式转换为 HTML)。
目前,我有一个简单FileUploaderView
的,它基本上是一个<input type="file">
监听文件更改,并value
使用像{ file: { type: SOME_TYPE' }, content: SOME_CONTENT }
.
然后,DocumentsNewController
监听其中的变化并将支持的文件转换为 HTML,并将结果放入文档正文。
但是,这样做感觉完全错误,并且不允许简单的重用(我希望能够这样做)。
App.DocumentsNewController = Ember.ObjectController.extend
# ... stuff ...
handleDocumentUpload: (->
doc = @get 'documentUpload'
return unless doc
Ember.run =>
@set 'uploadError', false
@set 'unsupportedFile', false
@set 'processingUpload', true
type = doc.file.type
text = ''
try
if type.match /^text\//
text = doc.content
# Convert new lines to br's and paragraphs
text = '<p>' + text.replace(/\n([ \t]*\n)+/g, '</p><p>').replace('\n', '<br />') + '</p>'
else if type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
text = new DOCX2HTML(doc.content).convert()
else
@set 'unsupportedFile', true
catch error
@set 'uploadError', true
finally
@set 'text', text
Ember.run => @set 'processingUpload', false
).observes 'documentUpload'
模板类似于
... stuff ...
{{view App.FileUploaderView valueBinding="documentUpload" accept="text/*"}}
将文件从控制器中转换出来的正确方法是什么?
我希望能够做类似的事情:
{{documentHandler resultBinding="documentUpload"}}
并在控制器中
App.DocumentsNewController = Ember.ObjectController.extend
# ... stuff ...
handleDocumentUpload: (->
if doc = @get 'documentUpload'
@set 'text', doc
).observes 'documentUpload'
我的第一个想法是制作一个DocumentHandlerView
显示输入字段,显示微调器,显示错误,解析文档并将结果分配给result
(并且由于控制器的模板具有resultBinding="documentUpload"
,HTML 将触发控制器的观察者)。
为此使用视图可以更轻松地重用,但我仍然觉得解析文档不是视图的工作。
有没有更好的办法?