У меня есть следующая функция downloadData, у которой есть «маска» обработки, отображаемая во время загрузки данных.
downloadData: function () {
var me = this,
grid = this.option.up('grid');
var mask = Ext.widget('messagebox', {
target: grid,
isProcessing: true
});
this.download(grid, mask);
},
Следующая функция «загрузки» загружает CSV-файл, создавая iframe с источником в виде html файла.
download: function (grid, mask, downloadData) {
me=this;
// data for child window
winRoot.myParams = {};
winRoot.myParams.grid = Grid;
winRoot.myParams.CallLink = function (csv) {
me.downloadToCSV( Grid);
setTimeout(function () {
var iframe = document.getElementById("_hidden_iframe_exporter");
iframe.contentDocument = null;
iframe.src = "";
dynamicGrid = null;
}, 100);
if (mask)
mask.destroy();
}
// iframe that calls download.html
var iframe = document.createElement('iframe');
iframe.id = "_hidden_iframe_exporter";
iframe.style.display = "none";
iframe.src = 'download.html';
iframe.hidden = true;
document.body.appendChild(iframe);
}
Я хочу добавить кнопку отмены к маске, которая отменяет загрузку файла . Но проблема, с которой я столкнулся, заключается в том, что iframe создается до того, как маска будет уничтожена (потому что она асинхронная javascript), что приводит к загрузке файла даже при нажатии кнопки отмены.