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); Тогда не придётся задумываться, а ожидает ли перекрываемый метод какие-нибудь аргументы. Если метод что-то возвращает, придётся задуматься :) |
Кстати, рекомендую посмотреть как устроены Ext.MessageBox, их нельзя вытянуть вверх
|
я б залез да посмотрел:agree: , только ответьте на вопрос: у меня ext-библиотеки сжатые чтоли? там весь код в одну строку, ноги сломаешь туда лезть. Может мне надо девелопер-эдишен искать?
|
cmygeHm,
эм, там есть и не сжатые версии файлов, папка source помоему. Точно не скажу так как у меня 2+ версия |
мессэйдж бокс и появляется всегда в середине. то что нужно прям.
в своем коде нашел баг, при создании экземпляра класса фаербаг дает too mush recursion. Вчера не было ошибки. Такая ... плавающая блин. Закомментил листенер beforeshow и работает без него. Видимо что-то с this.... Кто-то куда-то не туда-то обращается при создании экземпляра... |
Метод setPosition запускает событие move, обработчик события move вызывает setPosition, setPosition запускает событие move, ...
|
аааааааааааааа!!!!!!!!!!!!
(а в это время в голове: "Вот жопа!") |
ext-all - не читабелен, сжат и т.п.
ext-all-debug - это в читабельном виде. ext-all-debug-w-comments - догадайтесь сами. |
cmygeHm,
constrainHeader:true |
и stateful: false - для восстановления в середине браузера :)
Всем всем спасибо :dance: |
Часовой пояс GMT +3, время: 05:43. |