Я использую MessageBox из Ex JS Framework, чтобы показать диалог с кнопкой «ОК».
// app.js
function showNoteMessage (title, message, fn, scope) {
return Ext.Msg.show({
title: 'Title example',
message: 'Message text',
buttons: Ext.MessageBox.OKCANCEL,
promptConfig: false,
fn: function () {
if (fn) {
fn.apply(scope, arguments);
}
},
scope: scope
});
}
// index.html
<button onclick="showNoteMessage()">Open dialog several times</button>
Шаги для воспроизведения:
- Открыть диалог с помощью двух кнопок » Ok "и" Cancel ".
- Нажмите кнопку" Ok "
- Еще раз откройте диалоговое окно.
- При нажатии кнопки" Ok "еще раз, диалоговое окно застревает на экране и разблокирует весь его контент. Кнопки внутри диалогового окна отключены.
Текущая версия Ext. js 2.4.2.571.
После нажатия на Кнопка «ОК» или «Отмена», серый фон исчезает, и диалог застревает с разблокировкой контента под ним. Я пытаюсь обернуть Ext.Msg.show в setTimeout, но похоже, что он работает только локально.
Обновление
Я продолжаю работать над этой ошибкой и обнаружил, что проблема может быть в этой функции:
// MessageBox.js
...
onClick: function(button) {
if (button) {
var config = button.config.userConfig || {},
initialConfig = button.getInitialConfig(),
prompt = this.getPrompt();
if (typeof config.fn == 'function') {
button.disable();
this.on({
hiddenchange: function() {
config.fn.call(
config.scope || null,
initialConfig.itemId || initialConfig.text,
prompt ? prompt.getValue() : null,
config
);
button.enable();
},
single: true,
scope: this
});
}
}
this.hide();
},
...
По какой-то причине при шаге со сломанным щелчком пропускается эта часть кода:
this.on({
hiddenchange: function() {
config.fn.call(
config.scope || null,
initialConfig.itemId || initialConfig.text,
prompt ? prompt.getValue() : null,
config
);
button.enable();
},
single: true,
scope: this
});