ExtJS表单中的标准html输入。如何?

时间:2015-04-24 07:17:51

标签: javascript extjs

我想将类型为file的标准html输入添加到我的ExtJS表单中。我想要这个,因为在框架的4.1版中有一个错误 - filefield在提交后重置。我尝试了在stackoverflow上看到的所有补丁,例如:

Ext.form.field.File.override({
        extractFileInput: function() {
            var me = this,
                fileInput = me.fileInputEl.dom,
                clone = fileInput.cloneNode(true);
            fileInput.parentNode.replaceChild(clone, fileInput);
            me.fileInputEl = Ext.get(clone);
            return fileInput;
        }
});

Ext.override(Ext.form.field.File, {
        extractFileInput: function() {
            var me = this,
                fileInput = me.fileInputEl.dom,
                clone = fileInput.cloneNode(true);
            fileInput.parentNode.replaceChild(clone, fileInput);
            me.fileInputEl = Ext.get(clone);
            me.fileInputEl.on({
                scope: me,
                change: me.onFileChange
            });
            return fileInput;
        }
    });

而且,是的,我在文件字段上将clearOnSubmit设置为false。在FF它的工作原理,在IE中 - 不是。所以,我想在我的表格中使用旧学校<input type="file" name="file" />。我尝试了这两种方法:

{
    xtype:'panel',
    html:'<input type="file" name="file" />'
}

并且

{
    xtype:'displayfield',
    value:'<input type="file" name="file" />'
}

但他们不起作用。在服务器端,我看到一个空的$ _FILES数组。

2 个答案:

答案 0 :(得分:1)

像这样:

{
  xtype: 'box',
  autoEl: {
    tag: 'input',
    type: 'file',
    name: 'file'
  }
}

答案 1 :(得分:1)

不幸的是,你将在这条道路上度过一段非常艰难的时期,最终,它可能会让你无处可去。

首先,你的问题纯粹是Ext部分。正如您已经目睹的那样,该领域尚未提交。这是因为Ext并不知道它是其组成部分之一,以免形成一个表格领域,事实上它根本就不知道它。根据您的用例,这是两次破坏,因为Ext需要执行special treatment for upload forms。这部分是可以修复的,但这并非易事:请参阅this other question

但接下来是真正的困难......每个浏览器都会以不同的方式处理文件输入,并且像往常一样,尤其是IE。但在这种情况下,任何试图平息这些差异的尝试都将注定浏览器不会让你失望。因为用户的文件系统当然是一个主要的安全问题,所以不要搞乱它。请参阅this other question,与您的奇怪相似,并且缺乏令人信服的答案......那么,您想要的行为,甚至可以在IE中使用标准HTML吗?不确定,如果你不能做任何关于它的事情。

也许您可以使用HTML5文件API构建符合您需求的内容,但目标浏览器可能也不支持它。在任何情况下,正如我所说的那样,这并不容易......我认为现在最好的办法就是在你的设计中寻找一种解决方法,或者认为这对IE用户来说是一个小小的不便之处它的。