在我的应用程序中,我有许多窗口和面板,并且我使用自定义滚动条。因此,对于每个窗口或面板,我需要指定后布局侦听器以获取自定义滚动条
listeners:{
afterlayout: function(c){
fleXenv.fleXcrollMain(c.body.id);
}
}
所以我要寻找的是我需要为窗口和面板全局添加这个监听器,以便通过添加这个代码一次应该影响所有窗口或面板。
有什么办法可以做到这一点
在我的应用程序中,我有许多窗口和面板,并且我使用自定义滚动条。因此,对于每个窗口或面板,我需要指定后布局侦听器以获取自定义滚动条
listeners:{
afterlayout: function(c){
fleXenv.fleXcrollMain(c.body.id);
}
}
所以我要寻找的是我需要为窗口和面板全局添加这个监听器,以便通过添加这个代码一次应该影响所有窗口或面板。
有什么办法可以做到这一点
似乎您的自定义滚动条已在您的应用程序的所有 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
,因此它将继承行为。
您可以制作自己的面板和窗口扩展 ExtJS 默认组件。您可以定义所需的侦听器,设置 xtypes,然后在您的应用程序中使用这些修改后的组件。
另一种解决方案是用 Ext.override 覆盖现有的 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(这个自己定义):
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);
});
});
在这种情况下,首先您必须实例化您的窗口和面板,将它们注册到它们的管理器,然后像我在上面的示例中所做的那样调用每个函数。