ExtJS открывает новые окна как плитку - PullRequest
7 голосов
/ 15 апреля 2011

Я использую ExtJS и у меня запущено приложение, похожее на рабочий стол. Одна вещь, которая меня беспокоит, это то, что, когда открывается новое окно (ограниченное в центральной области области просмотра), оно всегда открывается в верхнем левом углу области просмотра.

Если открыто несколько окон, я хочу, чтобы они располагались мозаично, чтобы они не просто сидели друг над другом ...

есть идеи?

(Моя первоначальная мысль состояла в том, чтобы циклически проходить через окна в WindowMgr и проверять, есть ли в данный момент одно при 0,0. Если да, проверять 100 100 и т. Д., Пока одно из них не освободится.)

Надеюсь, это имеет смысл!

Ответы [ 3 ]

5 голосов
/ 15 апреля 2011

Я делаю так, как вы уже описали:

Ext.Window.prototype._autoTile = function() {
    var x = 10,
        y = 10;

    Ext.WindowMgr.each(function( win ) {
        if ( win === this )  return;

        var pos = win.getPosition();

        if ( pos[0] > (x - 15)
            && pos[0] < (x + 15)
            && pos[1] > (y - 15)
            && pos[1] < (y + 15)
        ) {
            x += 15;
            y += 15;
        }
    }, this);

    this.setPagePosition(x, y);
};

Ext.Window.prototype.initComponent =
    Ext.Window.prototype.initComponent.createSequence(function() {
        if ( this.autoTile ) {
            this.on('show', this._autoTile, this, {single: true});
        }
    });

var win = new Ext.Window({
    width: 300,
    height: 300,
    autoTile: true
});

win.show();

Эта реализация была адекватна моим потребностям, но ее можно было бы усложнить с помощью таких вещей, как проверка того, выходит ли перепозиционированное окно за границу области просмотра.

1 голос
/ 15 апреля 2011

Как уже было сказано, встроенных функций для поддержки этого нет.

На форумах ExtJS есть старая ветка обсуждения по этому поводу, однако для версии 2.x, но, возможно, вы сможете найти некоторые идеи для своей реализации.

1 голос
/ 15 апреля 2011

Нет ничего встроенного, чтобы сделать это, поэтому я думаю, что подход, который вы изложили выше, вполне разумен.Также имейте в виду, что вам может потребоваться иметь дело со скрытыми / свернутыми / развернутыми окнами в зависимости от того, что позволяет ваше приложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...