18.11.2010, 18:11
|
|
Профессор
|
|
Регистрация: 12.10.2010
Сообщений: 196
|
|
Window запоминает свое предыдущее местрорасположение.
Традиционный привет всем!
Два вопроса:
1. Окно после закрытия (посл close, не после hide) и очередного открытия - открывается в том же месте экрана, где оно находилось когда его закрывали. Как сделать так чтобы оно открывалось в центре экрана?
2. В фаерфоксе (точнее в namaroka под kubuntu) если взять окно за title и потащить мышкой в самый верх экрана, то можно занести его аш за меню, так, что когда мышь отпустишь крестика на окне уже не видно. Хоть страницу снова обновляй. Как эту проблему можно решить?
ДЛЯ ТЕХ, КТО НЕ ХОЧЕТ ЧИТАТЬ ВЕСЬ ПОСТ. РЕШЕНИЕ ТАКОЕ:
constrainHeader: true, // окно не будет засовываться не известно куда
stateful: false // окно не будет запоминать своего положения при закрытии
Последний раз редактировалось cmygeHm, 30.11.2010 в 12:41.
|
|
18.11.2010, 21:00
|
Профессор
|
|
Регистрация: 24.09.2010
Сообщений: 178
|
|
Ты используешь Ext.state.Manager
Ext.state.Manager.setProvider(new Ext.state.CookieProvider());
var win = new Window(...);
win.restoreState();
Про фаерфокс под кубунту - не наю
|
|
19.11.2010, 09:03
|
|
Профессор
|
|
Регистрация: 12.10.2010
Сообщений: 196
|
|
Сообщение от VKS
|
Ты используешь Ext.state.Manager
|
Это вопрос? Или ответ ?
Глянул что такое Ext.state.Manager, я его не использую. "Оно само срабатывает".
Вот ребята обсуждают: http://www.sencha.com/forum/showthre...indow&p=313320
Я только не понял, он предлагает добавить этот метод в сам класс?
Создал тему на их форуме, может ответят.
Последний раз редактировалось cmygeHm, 19.11.2010 в 09:46.
|
|
22.11.2010, 15:11
|
Ламер
|
|
Регистрация: 19.02.2010
Сообщений: 295
|
|
Сообщение от cmygeHm
|
2. В фаерфоксе (точнее в namaroka под kubuntu) если взять окно за title и потащить мышкой в самый верх экрана, то можно занести его аш за меню, так, что когда мышь отпустишь крестика на окне уже не видно. Хоть страницу снова обновляй. Как эту проблему можно решить?
|
// you window
{
listeters:{
move : function( w, x, y ){
if(y > "за пределами экрана"){
w.setPosition(....);
}
}
}
}
и еще, позиция окна сохраняется в куках...
Последний раз редактировалось DooMer, 22.11.2010 в 15:13.
|
|
22.11.2010, 15:28
|
|
Профессор
|
|
Регистрация: 12.10.2010
Сообщений: 196
|
|
спасибо. Я думал что может есть свойство какое. которое не разрешит затащить туда. а так - да, листенер - тоже выход из ситуации.спасибо.
|
|
22.11.2010, 17:54
|
|
Профессор
|
|
Регистрация: 12.10.2010
Сообщений: 196
|
|
Посмотрите на картинке, окно не просто залазит за края экрана, оно залазит за панель браузера. и тогда крестика не видно. и еще, посмотрел на в документации ExtJS, и не нашел там события move, у меня на такое событие вообще нет реакции у окна.
|
|
23.11.2010, 10:43
|
Профессор
|
|
Регистрация: 24.09.2010
Сообщений: 178
|
|
move : ( Ext.Component this, Number x, Number y )
Fires after the component is moved.
Fires after the component is moved.
Listeners will be called with the following arguments:
* this : Ext.Component
* x : Number
The new x position
* y : Number
The new y position
http://dev.sencha.com/deploy/dev/doc...Component-move
|
|
26.11.2010, 10:17
|
|
Профессор
|
|
Регистрация: 12.10.2010
Сообщений: 196
|
|
Спасибо, я сделал. Я не тому окну листенер добавил и сидел думал почему не срабатывает, отдыхать надо чаще
|
|
29.11.2010, 16:17
|
|
Профессор
|
|
Регистрация: 12.10.2010
Сообщений: 196
|
|
В общем создал свой класс окна, наследник Ext.Window и добавил ему соответствующие листенеры:
CenteredWindow = Ext.extend(Ext.Window, {
initComponent: function(){
Ext.applyIf(this, {
resizable: false,
listeners: {
move: function (w, x, y){
if (x<10 || (x+w.width)>GetWidth() || y<10 || y>GetHeight())
w.setPosition(GetWidth()/2-w.getWidth()/2, GetHeight()/2-w.getHeight()/2);
},
beforeshow: function(){
this.setPosition(GetWidth()/2-this.getWidth()/2, GetHeight()/2-this.getHeight()/2);
}
}
});
CenteredWindow.superclass.initComponent.call(this);
}
});
function GetWidth()
{
var x = 0;
if (self.innerHeight)
{
x = self.innerWidth;
}
else if (document.documentElement && document.documentElement.clientHeight)
{
x = document.documentElement.clientWidth;
}
else if (document.body)
{
x = document.body.clientWidth;
}
return x;
}
function GetHeight()
{
var y = 0;
if (self.innerHeight)
{
y = self.innerHeight;
}
else if (document.documentElement && document.documentElement.clientHeight)
{
y = document.documentElement.clientHeight;
}
else if (document.body)
{
y = document.body.clientHeight;
}
return y;
}
|
|
29.11.2010, 16:23
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Сообщение от cmygeHm
|
CenteredWindow.superclass.initComponent.call(this) ;
|
Здесь полезно писать всегда одинаковый шаблон
<ClassName>.superclass.<methodName>.apply(this, arguments);
В вашем случае
CenteredWindow.superclass.initComponent.apply(this, arguments);
Тогда не придётся задумываться, а ожидает ли перекрываемый метод какие-нибудь аргументы.
Если метод что-то возвращает, придётся задуматься
|
|
|
|