我的应用程序允许用户管理他们的文档。当创建一个用户时,用户必须手动输入文档内容或从他们的计算机中选择一个文件(这会将许多格式转换为用户的HTML)。解决疑虑的正确方法是?
目前,我有一个简单FileUploaderView
这基本上是一个<input type="file">
侦听到文件的变化,并与像{ file: { type: SOME_TYPE' }, content: SOME_CONTENT }
对象更新视图的value
财产。
然后,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会触发控制器的观察者)。
使用视图可以更容易重用,但我仍然认为解析文档不是视图的工作。
有没有更好的方法?
在您的控制器中有逻辑接缝到目前为止的正确位置 – intuitivepixel
但我希望能够在其他控制器中重用它。在我需要做文档处理的每个控制器中复制它太奇怪了。 –
你可以创建一个控制器混合,然后从中扩展你的控制器从 – intuitivepixel