0

在我的应用程序中,我有许多窗口和面板,并且我使用自定义滚动条。因此,对于每个窗口或面板,我需要指定后布局侦听器以获取自定义滚动条

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

所以我要寻找的是我需要为窗口和面板全局添加这个监听器,以便通过添加这个代码一次应该影响所有窗口或面板。

有什么办法可以做到这一点

4

3 回答 3

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

于 2012-09-18T02:26:58.617 回答
0

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

另一种解决方案是用 Ext.override 覆盖现有的 Ext.panel.Panel 和Ext.window.Window

于 2012-09-17T11:27:22.787 回答
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 保持不变。

另一种方法是使用WindowManager和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);
  });
});

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

于 2012-09-17T16:01:55.890 回答