我正在使用Ember Uploader组件来允许用户上传.txt文件。
此文件必须以非常特定的方式格式化,如果文件格式不正确,则无法上传。
组件首先响应change事件,该事件监视正在选择的新文件。
这会将属性' 设置为所选文件,从而导致 filesDidChange 功能运行。
在 filesDidChange 中,读取文件并检查格式错误。如果发现错误,它会告诉用户更新文件并再试一次。
第一次尝试时,一切都很完美。问题是,当您尝试重新上传已编辑的文件时,组件不会将此识别为更改事件 - 警报(" Hello World")不会火了。
我认为这是因为选择了相同的文件。
我已尝试在 filesDidChange 功能结束时将'文件' 设置为null,但这无效。这是有道理的,因为更改事件会监视元素,而不是属性。
如果在第二次尝试时选择上传相同的文件,我怎样才能触发更改事件?
change: function(e) {
alert("Hello World");
var input = e.target;
var selectedFiles = input.files;
if (selectedFiles) {
this.set('files', selectedFiles);
}
},

filesDidChange: function(files) {
//Reads the text file using the FileReader API.
//Checks that the file is correcty formatted.
//Prevents the upload and displays an error message if the file format is wrong.
//Asks the user to fix the errors and try to upload the same file again.
}.observes('files'),

答案 0 :(得分:0)
我找到了一个可行的解决方案:
步骤1是将input元素包装在它自己的表单元素中。理想情况下,表单包装器应具有唯一的ID。
<form id='file-upload'>
<input type='file' />
</form>
然后您可以使用jQuery重置该表单:
Ember.$("#single-upload")[0].reset();
文件输入的值变为空,因此可以再次上载相同的文件。