2012-09-17 28 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); 
    }); 
}); 

在这种情况下,首先你必须实例化窗口和面板,他们注册到他们的经理,然后调用每个功能就像我在上面的例子中所做的那样。