Extjs 禁用本机网格滚动

Posted

技术标签:

【中文标题】Extjs 禁用本机网格滚动【英文标题】:Extjs disable native grid scroll 【发布时间】:2012-07-27 08:04:58 【问题描述】:

我的 extjs 版本是 4.0.2a。有时网格中的垂直滚动条停止工作。这是常见的问题。我找到了一些解决方案,但它们对我不起作用:

this.Grid.hideVerticalScroller();
this.Grid.initVerticalScroller();
this.Grid.update();
this.Grid.determineScrollbars();
this.Grid.forceComponentLayout();
this.Grid.doComponentLayout();

我也尝试过 scroll: false,但它也不起作用,让我的浏览器停止响应。 我想,我可以禁用 extjs 网格滚动条并添加浏览器标准滚动条(溢出:自动),但我不知道如何。 有什么建议吗?


附:我不能使用另一个版本的 Extjs,因为有一个非常大的工作项目,在一些核心文件中有一些修复。使用新版本的 Extjs 将很难让所有工作都正常工作

【问题讨论】:

为什么投反对票?似乎是一个合理的问题。 【参考方案1】:

这是我在 4.0.7 中使用的“修复”;它可能适用于 4.0.2。代码不是我的,我从 sencha.com 论坛拿的:

Ext.define('Ext.ux.grid.Panel', 
    extend: 'Ext.grid.Panel',

    initComponent: function() 
        var me = this;

        me.callParent(arguments);

        me.on('scrollershow', function(scroller) 
          if (scroller && scroller.scrollEl) 
            scroller.clearManagedListeners(); 
            scroller.mon(scroller.scrollEl, 'scroll', scroller.onElScroll, scroller); 
          
        );
    ,

    onViewRefresh: function() 
        var me = this;

        try 
            me.callParent();
        
        catch (e) ;
    
);

使用 Ext.ux.grid.Panel 而不是 Ext.grid.Panel 来继承您的 Grid 类。它并不能完全解决问题,但会大大降低特定错误的可见性。

另外,我建议您硬着头皮升级到 4.1.1,根据我的经验,这是非常值得的。首先从核心中删除您的自定义修复;您可以将它们重构为覆盖核心类的单独类。在那之后,它会变得更容易。我知道,我也经历过。

【讨论】:

我会试试你的解决方法。如果有帮助,我会写在这里 我认为,它对我有用,因为经过一些测试,我没有遇到滚动问题。谢谢你。 关于更改核心 :) 我知道,这不好,但在这个项目的开始,我对在 extjs 中重新声明核心元素/功能知之甚少 :) 就像我说的,我也经历过。修改核心源来修复这个和那个并完成它似乎很容易;不幸的是,从长远来看,这种方法有很多缺点。实际上,您将自己锁定在特定版本的框架中,并且无法应用以后发布的任何维护版本。这对于早期的 Ext 4.0 版本尤其糟糕,因为它们特别有缺陷。所以我的建议是付出一些努力来解决这个锁定问题;之后管理你的代码会更容易。

以上是关于Extjs 禁用本机网格滚动的主要内容,如果未能解决你的问题,请参考以下文章

如何禁用 ExtJS 网格中的控件?

如果网格为空,Extjs 4 禁用排序

如何在 Extjs 网格中禁用删除图标

如何在 ExtJS 4 网格面板中保留垂直滚动条?

Extjs 经典网格面板滚动

用于网格面板的 extjs 3.2 水平滚动条