2011-04-15 78 views
7

我正在使用ExtJS並運行一個類似桌面的應用程序。有一件事讓我煩惱,就是當一個新窗口打開時(綁定在視口的中心區域內),它總是在視口的左上角打開。ExtJS打開新窗口作爲平鋪

如果有多個窗口打開,我希望他們瓷磚所以他們不只是坐在ontop的彼此......

任何想法的?

(我最初的想法是循環throught在WindowMgr窗戶,檢查是否有一個目前在0,0。如果是,檢查100,100等,直到一個是免費的。)

希望這是有道理的!

回答

5

我做的還多,你已經形容:

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(); 

這種實現是足夠滿足我的需求,但可以站在作出了這樣的事情作爲檢查的重新定位窗口是否被突破的更復雜視口邊界。

+0

感謝您的回答!我喜歡它如何作爲組件的一個屬性添加,很好的工作! – neolaser 2011-04-17 23:04:45

+0

喜歡這種方法,但是這對ExtJS4有效嗎?我收到了'無法識別的createSequence'錯誤。 – JayCrossler 2011-08-30 02:03:20

+0

這是爲ExtJS 3編寫的。v4的許多更改之一是刪除添加到全局對象的方法,例如添加到函數的createSequence方法。這可以通過調用Ext.Function.createSequence來取代,但不能保證其餘部分能夠正常工作。 – owlness 2011-09-01 02:30:26

1

沒有什麼內置的,所以我認爲你上面概述的方法是相當合理的。另外請記住,您可能需要根據您的應用程序允許的情況來處理隱藏/最小化/最大化窗口。