Общее·количество·просмотров·страницы

Java Dev Notes - разработка на Java (а также на JavaScript/Python/Flex и др), факты, события из АйТи

суббота, 26 сентября 2009 г.

ExtJS - confirm window не показывается поверх остальных окон на десктопе

Проблема с ExtJS - на десктопе расположено несколько окон. Одно окно содержит панель со списком контактов. При удалении контакта надо выводить confirm window, т.е. подтверждать удаление. При этом, когда открыто одно окно, confirm window выводится нормально, т.е. поверх окна, блокируя все остальное. Если же на десктопе открыто несколько окон, то confirm window выводится позади них. Используется Firefox 3.0.14.

Причина:
Windowsmanager z-index равен по умолчанию 9000. Z-index остальных окон, которые добавляются к document.body, равен 9003.

Решение:
Уменьшить z-index группы окон, сделать его меньше, чем 9000.

var windows = new Ext.WindowGroup();
windows.zseed = 7000;


Пример:
Рассмотрим приложение, использующее десктоп, из комплекта примеров ExtJS. У меня на машине оно находится в папке D:\ext-3.0.0\examples\desktop. В GridWindow навесим обработчик на конпку "Add something":

Файл D:\ext-3.0.0\examples\desktop\sample.js:




tbar:[{
text:'Add Something',
tooltip:'Add a new row',
iconCls:'add',
handler: oops // this is OUR handler
}, '-', {
text:'Options',
tooltip:'Blah blah blah blaht',
iconCls:'option'
},'-',{
text:'Remove Something',
tooltip:'Remove the selected item',
iconCls:'remove'
}]

....

function oops() {
Ext.MessageBox.confirm('Add something', 'Do you really want add something?', function(btn) {
if (btn == 'yes') {
console.info('add smth');
} else {
console.info('do not add');
}
});
}


Если открыть только одно окно - GridWindow, то confirm ,удет показываться нормально - поверх него. Но если открыть еще дополнительное окно, то confirm показывается позади этих окон.

Теперь надо отредактировать файл D:\ext-3.0.0\examples\desktop\js\Desktop.js:



Ext.Desktop = function(app){
this.taskbar = new Ext.ux.TaskBar(app);
var taskbar = this.taskbar;

var desktopEl = Ext.get('x-desktop');
var taskbarEl = Ext.get('ux-taskbar');
var shortcuts = Ext.get('x-shortcuts');

var windows = new Ext.WindowGroup();
windows.zseed = 7000; // this is the KEY!!!!



Строкой

windows.zseed = 7000;

мы задаем стартовое значение z-index для всех окон группы (т.е. для всех окон десктопа). Т.к. задано значение меньше 9000, то это решает проблему.

См. также эту ссылку на форуме ExtJS.

Комментариев нет:

Отправить комментарий

Постоянные читатели