Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Window запоминает свое предыдущее местрорасположение. (https://javascript.ru/forum/extjs/13174-window-zapominaet-svoe-predydushhee-mestroraspolozhenie.html)

cmygeHm 18.11.2010 18:11

Window запоминает свое предыдущее местрорасположение.
 
Традиционный привет всем!
Два вопроса:
1. Окно после закрытия (посл close, не после hide) и очередного открытия - открывается в том же месте экрана, где оно находилось когда его закрывали. Как сделать так чтобы оно открывалось в центре экрана?
2. В фаерфоксе (точнее в namaroka под kubuntu) если взять окно за title и потащить мышкой в самый верх экрана, то можно занести его аш за меню, так, что когда мышь отпустишь крестика на окне уже не видно. Хоть страницу снова обновляй. Как эту проблему можно решить?

ДЛЯ ТЕХ, КТО НЕ ХОЧЕТ ЧИТАТЬ ВЕСЬ ПОСТ. РЕШЕНИЕ ТАКОЕ:
constrainHeader: true, // окно не будет засовываться не известно куда
       stateful: false // окно не будет запоминать своего положения при закрытии

VKS 18.11.2010 21:00

Ты используешь Ext.state.Manager
Ext.state.Manager.setProvider(new Ext.state.CookieProvider());
   var win = new Window(...);
   win.restoreState();


Про фаерфокс под кубунту - не наю

cmygeHm 19.11.2010 09:03

Цитата:

Сообщение от VKS (Сообщение 79808)
Ты используешь Ext.state.Manager


Это вопрос? Или ответ ? :write:

Глянул что такое Ext.state.Manager, я его не использую. "Оно само срабатывает".

Вот ребята обсуждают: http://www.sencha.com/forum/showthre...indow&p=313320

Я только не понял, он предлагает добавить этот метод в сам класс?
Создал тему на их форуме, может ответят.

DooMer 22.11.2010 15:11

Цитата:

Сообщение от cmygeHm (Сообщение 79801)
2. В фаерфоксе (точнее в namaroka под kubuntu) если взять окно за title и потащить мышкой в самый верх экрана, то можно занести его аш за меню, так, что когда мышь отпустишь крестика на окне уже не видно. Хоть страницу снова обновляй. Как эту проблему можно решить?

// you window
{
   listeters:{
         move : function( w, x, y ){
                if(y > "за пределами экрана"){
                    w.setPosition(....);
                }
         }
   }
}

и еще, позиция окна сохраняется в куках...

cmygeHm 22.11.2010 15:28

спасибо. Я думал что может есть свойство какое. которое не разрешит затащить туда. а так - да, листенер - тоже выход из ситуации.спасибо.

cmygeHm 22.11.2010 17:54

Вложений: 1
Посмотрите на картинке, окно не просто залазит за края экрана, оно залазит за панель браузера. и тогда крестика не видно. и еще, посмотрел на в документации ExtJS, и не нашел там события move, у меня на такое событие вообще нет реакции у окна. :nono:

VKS 23.11.2010 10:43

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

cmygeHm 26.11.2010 10:17

Спасибо, я сделал. Я не тому окну листенер добавил и сидел думал почему не срабатывает, отдыхать надо чаще:)

cmygeHm 29.11.2010 16:17

В общем создал свой класс окна, наследник 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;
}

Kolyaj 29.11.2010 16:23

Цитата:

Сообщение от cmygeHm
CenteredWindow.superclass.initComponent.call(this) ;

Здесь полезно писать всегда одинаковый шаблон
<ClassName>.superclass.<methodName>.apply(this, arguments);

В вашем случае
CenteredWindow.superclass.initComponent.apply(this, arguments);

Тогда не придётся задумываться, а ожидает ли перекрываемый метод какие-нибудь аргументы.

Если метод что-то возвращает, придётся задуматься :)


Часовой пояс GMT +3, время: 00:18.