У меня проблема такая:
Есть TabPanel с двумя вкладками.Первый - это FormPanel, второй - GridPanel.
И я добавил слушателя перед обменом.Когда значения в FormPanel изменяются, должен появиться Ext.MessageBox.cofirm с вопросом: «Вы хотите сохранить свои изменения?».
И он появляется, но в TabPanel.
Это не такработать с любым типом окна сообщения.
Это немного странно, потому что, когда я нажимаю кнопку отправки в этой форме, появляется окно сообщения ожидания, а после сохранения изменений появляется информационное окно.
Есть идеи?
отредактировано
Я удалил все наборы настроек из tabPanel и formPanel, которые являются первой вкладкой, так что все по умолчанию.Окно сообщения выглядит так (прямо сейчас):
Ext.MessageBox.confirm('Title','message',Ext.emptyFn);
Я думаю, проблема в том, что окно сообщения каким-то образом привязано к gridPanel, который находится под tabPanel.Я добавил плагин в tabPanel и при событии beforetabchange показываю это подтверждающее сообщение.Забавно то, что я делаю точно такой же код в плагине, который добавляется для отправки кнопки в formPanel и там все отлично работает.
отредактировано
new Ext.TabPanel({
activeTab: 0,
id: 'tabPanel_id',
items: [
new Ext.form.FormPanel({
cls: 'xf-windowForm',
bodyCssClass: '',
autoHeight: false,
autoScroll: true,
border: false,
layout: 'form',
buttonAlign: 'center',
monitorValid: true,
labelAlign: 'right',
labelPad: 10,
defaults: {
msgTarget: 'under',
anchor: '100%'
},
id: 'formPanel_id',
title: translate('tab_title-general'),
items: [
new Ext.form.TextField({
fieldLabel: 'label',
name: 'name',
id: 'id'
})
],
buttons: [
new Ext.Button({
text: 'save',
type: 'submit',
formBind: true,
plugins: {
init: function (component) {
component.on({
click: function() {
Ext.MessageBox.confirm('title', 'messsage', Ext.emptyFn);
}
});
}
}
})
]
}),
new Ext.Panel()
],
plugins: {
init: function(component) {
component.on({
beforetabchange: function() {
Ext.MessageBox.confirm('title', 'messsage', Ext.emptyFn);
}
});
}
}
});
Естьтакже gridPanel под этой вкладкой.И это окно сообщений в плагине кнопок работает нормально (панель вкладок становится серой, а окно сообщений появляется сверху), но второе, в плагине tabpanels, добавляет еще одну маску на сетку и показывает под панелью и над сеткой.
отредактировано
Ext.onReady(function(){
new Ext.Window({
initHidden: false,
width: 700,
title: 'WindowTitle',
items: [
new Ext.TabPanel({
items: [
new Ext.Panel({title: 'Title1'}),
new Ext.Panel({title: 'Title2'})
],
plugins: {
init: function(component) {
component.on({
beforetabchange: function(t,c,n) {
Ext.MessageBox.confirm('MessageBoxTitle', 'Confirm message.', Ext.emptyFn, component);
}
});
}
}
})
]
});
});
Это полный код, в котором возникает проблема.Окно сообщения в окне show event отображается нормально, но в tabPanel оно находится под окном.
Я работаю на FF 4.0.1, но проблема возникает также в IE 8 и Chrome 12. Я использую ExtJS 3.3.1.
решение
z-индекс окон должен быть уменьшен (т.е. до 7000, по умолчанию 9000).Для этого я использую Ext.WindowGroup.
windows = new Ext.WindowGroup();
windows.zseed = 7000;
//and in config properties in window:
manager:windows
Спасибо всем за помощь.