我使用extjs4和dwr3上传文件
这就是我的形式
{xtype: 'fileuploadfield',
name: 'file',
fieldLabel: 'Archivo',
allowBlank: false,
buttonText: 'Seleccionar...'
}, {
xtype: 'button',
text: 'Cargar',
action: 'cargarArchivo'
}
当我点击按钮(标记为Cargar)时,它会提交文件并保持在同一页面,到目前为止一切顺利。问题是,当我选择另一个文件时,该字段中的文本保持不变,而不是显示所选的新文件
这就是我在我的控制器中所拥有的:
init: function() {
this.control({
'NciImport button[action=cargarArchivo]': {
click: this.cargaArchivo
}
});
},
cargaArchivo : function (button){
clickedButton = button;
bsNciNiv.cargaArchivoNci(dwr.util.getValue('file'), function(x,y,z){
clickedButton.up('form').down('fileuploadfield').createFileInput(); // funny solution
});
}
bsNciNiv.cargaArchivoNci 部分是我的DWR服务
这条线我评论为搞笑解决方案有点作品,在添加后其余的工作按预期,但我真的不认为这是正确的解决方案,只是添加它作为一个提示,以防万一有用
任何人都可以确认这是一个错误,还是有办法解决这个问题?感谢
(顺便说一下,不确定这与dwr3有什么关系,但无论如何都标记了它)
答案 0 :(得分:4)
我刚刚使用Ext-JS 4.1.1和DWR3遇到了同样的问题。我调试了DWR javascript并找到了原因。当dwr方法参数包含fileupload字段时,dwr构造一个multipart post消息和一个隐藏的iframe,而不是使用XmlHttpRequest。作为此过程的一部分,它使用克隆(相同的ID和属性)替换原始fileupload元素(这本身是一个隐藏元素,由Ext FileUpload组件创建和管理)。因此,Ext字段的fileInputEl属性不再引用被替换的元素,并且未为新元素的“change”事件注册组件的onFileChange()事件处理程序。所以,它不是Ext-JS中的错误。
我在回调中解决了这个问题:
var fileInputId = uploadField.fileInputEl.dom.id;
MyDwrService.fileUpload(uploadField.fileInputEl.dom, arg2, function(results) {
uploadField.fileInputEl = Ext.get(document.getElementById(fileInputId));
uploadField.fileInputEl.on({
scope: uploadField,
change: uploadField.onFileChange
});
});
它适用于Firefox,Chrome和IE8
答案 1 :(得分:1)
我的猜测是这个组件不是为了上传多个文件而设计的(串联)。 您看到的问题可能是由于此隐藏元素未被清除:http://docs.sencha.com/ext-js/4-0/#!/api/Ext.form.field.File-property-fileInputEl
您可以将此文件作为Sencha的错误提交,尽管他们可能认为这是一个功能:)