FileUploadField «застрял» после отправки формы с ExtJS4 / DWR - PullRequest
0 голосов
/ 28 февраля 2012

я использую 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
    });
}

The bsNciNiv.cargaArchivoNci часть - это моя служба DWR

строка, которую я прокомментировал как смешное решение вид работ, после добавления его все остальное работает, как и ожидалось, но я действительно не думаюэто правильное решение, просто добавьте его в качестве подсказки на тот случай, если оно будет полезно

. Может ли кто-нибудь подтвердить, является ли это ошибкой или есть способ исправить это?спасибо

(кстати, не уверен, что это как-то связано с dwr3, но я все равно пометил его)

Ответы [ 2 ]

4 голосов
/ 01 октября 2012

Я только что столкнулся с этой же проблемой, используя Ext-JS 4.1.1 и DWR3. Я отладил JavaScript DWR и нашел причину. Когда параметры метода dwr включают в себя поле fileupload, dwr создает многокомпонентное почтовое сообщение и скрытый iframe вместо использования XmlHttpRequest. В рамках этого процесса он заменяет исходный элемент fileupload (который сам по себе является скрытым элементом, созданным и управляемым компонентом Ext FileUpload) на клон (тот же идентификатор и свойства). В результате свойство fileInputEl поля Ext больше не ссылается на заменяемый элемент, и обработчик события onFileChange () компонента не зарегистрирован для события «change» нового элемента. Так что это не ошибка в 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 голос
/ 28 февраля 2012

Я предполагаю, что этот компонент не был предназначен для загрузки нескольких файлов (последовательно).Вероятно, проблема, которую вы видите, связана с тем, что этот скрытый элемент не очищается: http://docs.sencha.com/ext-js/4-0/#!/api/Ext.form.field.File-property-fileInputEl

Возможно, вы можете сообщить об этом как об ошибке в Sencha, хотя они могут посчитать это функцией :)

...