窗口的Extjs4侦听器

窗口的Extjs4侦听器,extjs4,Extjs4,在我的应用程序中,我有许多窗口和面板,我使用自定义滚动条。因此,对于每个窗口或面板,我需要指定afterlayout listener以获得自定义滚动条 listeners:{ afterlayout: function(c){ fleXenv.fleXcrollMain(c.body.id); } } 所以我要找的是,我需要为窗口和面板全局添加此侦听器,这样,通过一次性添加此代码,所有窗口或面板都会收到效果 有没有办法做到这一点您可

在我的应用程序中,我有许多窗口和面板,我使用自定义滚动条。因此,对于每个窗口或面板,我需要指定afterlayout listener以获得自定义滚动条

            listeners:{
    afterlayout: function(c){
    fleXenv.fleXcrollMain(c.body.id);
      }
    }
所以我要找的是,我需要为窗口和面板全局添加此侦听器,这样,通过一次性添加此代码,所有窗口或面板都会收到效果


有没有办法做到这一点

您可以创建自己的扩展ExtJS默认组件的面板和窗口。您可以定义所需的侦听器,设置xtypes,然后在应用程序中使用这些修改过的组件


另一个解决方案是使用IMHO覆盖现有的Ext.panel.panel和Ext.window.window,我认为最好的方法是定义您的个人窗口/面板类。是的,一种方法是使用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不变

另一种方法是使用WindowManager和PanelManager(这是您自己定义的):


在这种情况下,首先必须实例化窗口和面板,将它们注册到它们的管理器,然后像我在上面的示例中所做的那样调用每个函数。

您的自定义滚动条似乎在应用程序的所有窗口和面板中使用。因此,扩展核心ExtJs类IMHO没有什么错。 将其作为默认启用的“功能”实现,但在不需要滚动条的少数情况下,可以禁用

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.window
扩展自
Ext.panel.panel
,因此它将继承该行为

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