Ember js - 文件上传组件 - 强制更改事件在第二次尝试上载同一文件时触发

时间:2015-10-30 12:54:21

标签: javascript ember.js

我正在使用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'),




1 个答案:

答案 0 :(得分:0)

我找到了一个可行的解决方案:

步骤1是将input元素包装在它自己的表单元素中。理想情况下,表单包装器应具有唯一的ID。

<form id='file-upload'>
  <input type='file' />
</form>

然后您可以使用jQuery重置该表单:

Ember.$("#single-upload")[0].reset();

文件输入的值变为空,因此可以再次上载相同的文件。