使用ExtJS4 / DWR提交表单后,FileUploadField'卡住了'

时间:2012-02-27 22:45:40

标签: file-upload extjs4 dwr

我使用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有什么关系,但无论如何都标记了它)

2 个答案:

答案 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的错误提交,尽管他们可能认为这是一个功能:)