Window запоминает свое предыдущее местрорасположение.
Традиционный привет всем!
Два вопроса: 1. Окно после закрытия (посл close, не после hide) и очередного открытия - открывается в том же месте экрана, где оно находилось когда его закрывали. Как сделать так чтобы оно открывалось в центре экрана? 2. В фаерфоксе (точнее в namaroka под kubuntu) если взять окно за title и потащить мышкой в самый верх экрана, то можно занести его аш за меню, так, что когда мышь отпустишь крестика на окне уже не видно. Хоть страницу снова обновляй. Как эту проблему можно решить? ДЛЯ ТЕХ, КТО НЕ ХОЧЕТ ЧИТАТЬ ВЕСЬ ПОСТ. РЕШЕНИЕ ТАКОЕ: constrainHeader: true, // окно не будет засовываться не известно куда stateful: false // окно не будет запоминать своего положения при закрытии |
Ты используешь Ext.state.Manager
Ext.state.Manager.setProvider(new Ext.state.CookieProvider()); var win = new Window(...); win.restoreState(); Про фаерфокс под кубунту - не наю |
Цитата:
Это вопрос? Или ответ ? :write: Глянул что такое Ext.state.Manager, я его не использую. "Оно само срабатывает". Вот ребята обсуждают: http://www.sencha.com/forum/showthre...indow&p=313320 Я только не понял, он предлагает добавить этот метод в сам класс? Создал тему на их форуме, может ответят. |
Цитата:
// you window { listeters:{ move : function( w, x, y ){ if(y > "за пределами экрана"){ w.setPosition(....); } } } } и еще, позиция окна сохраняется в куках... |
спасибо. Я думал что может есть свойство какое. которое не разрешит затащить туда. а так - да, листенер - тоже выход из ситуации.спасибо.
|
Вложений: 1
Посмотрите на картинке, окно не просто залазит за края экрана, оно залазит за панель браузера. и тогда крестика не видно. и еще, посмотрел на в документации ExtJS, и не нашел там события move, у меня на такое событие вообще нет реакции у окна. :nono:
|
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 |
Спасибо, я сделал. Я не тому окну листенер добавил и сидел думал почему не срабатывает, отдыхать надо чаще:)
|
В общем создал свой класс окна, наследник 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; } |
Цитата:
<ClassName>.superclass.<methodName>.apply(this, arguments); В вашем случае CenteredWindow.superclass.initComponent.apply(this, arguments); Тогда не придётся задумываться, а ожидает ли перекрываемый метод какие-нибудь аргументы. Если метод что-то возвращает, придётся задуматься :) |
Часовой пояс GMT +3, время: 00:18. |