2012-09-17 103 views
0

在我的應用程序中,我有很多窗口和麪板,並使用自定義滾動條即時通訊。因此,對於每個窗口或面板需要指定afterlayout監聽來獲取自定義滾動條Extjs4窗口監聽器

  listeners:{ 
    afterlayout: function(c){ 
    fleXenv.fleXcrollMain(c.body.id); 
     } 
    } 

,所以我需要讓通過將此代碼添加一次在全球範圍添加此偵聽器的窗口和麪板什麼即時尋找的是應該影響所有的窗戶或面板。

有沒有辦法做到這一點

回答

1

您的自定義滾動條似乎用於您的應用程序的所有Windows和麪板中。因此,擴展核心ExtJs類恕我直言沒有錯。 將其實施爲默認啓用的「功能」,但對於極少數情況下不需要滾動條的功能可以禁用。

Ext.define('patch.Ext.panel.Panel-scrollbar', { 
    override: 'Ext.panel.Panel', 

    enableCustomScrollbar: true, 

    afterLayout: function() { 
     this.fixScrollbar(); 
     this.callParent(arguments); 
    }, 

    fixScrollbar: function() { 
     if(this.enableCustomScrollbar) { 
      // your code 
     } 
    } 
}); 

負載與Ext.require('patch.Ext.panel.Panel-scrollbar')或將其添加爲依賴關係(requires)到您的應用程序定義。

Ext.window.WindowExt.panel.Panel延伸,因此它會繼承該行爲。

0

你可以讓你自己的面板和窗口延長ExtJS的默認組件。您可以定義所需的偵聽器,設置xtypes,然後在應用程序中使用這些修改後的組件。

另一種解決辦法是將覆蓋現有Ext.panel.Panel和Ext.window.Window與Ext.override

0

恕我直言,我認爲要做到這一點的最好的方法是定義你的個人窗口/面板類。是的,一種方法是使用Ext.override功能,但我認爲這不是一個好主意。

我建議你這樣做:

Ext.define ('MyCustomWindow', { 
    extend: 'Ext.window.Window' , 
    listeners: { 
    afterlayout: function (win) { 
     fleXenv.fleXcrollMain (win.body.id); 
    } 
    } 
} 

Ext.define ('MyCustomPanel', { 
    extend: 'Ext.panel.Panel' , 
    listeners: { 
    afterlayout: function (panel) { 
     fleXenv.fleXcrollMain (panel.body.id); 
    } 
    } 
} 

現在,您可以實例MyCustomWindow和MyCustomPanel,留下Ext.window.Window和Ext.panel.Panel不變。

另一種方法是使用窗口管理器和PanelManager(這個自己定義):

Ext.WindowManager.register (window1); 
Ext.WindowManager.register (window2); 
Ext.WindowManager.register (window3); 

Ext.WindowManager.each (function (win) { 
    win.on ('afterlayout', function (window) { 
    fleXenv.fleXcrollMain (window.body.id); 
    }); 
}); 

在這種情況下,首先你必須實例化窗口和麪板,他們註冊到他們的經理,然後調用每個功能就像我在上面的例子中所做的那樣。