我想将类型为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数组。
答案 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用户来说是一个小小的不便之处它的。