extjs 4.1 页面在行更新时滚动到 Internet Explorer 中的网格顶部

Posted

技术标签:

【中文标题】extjs 4.1 页面在行更新时滚动到 Internet Explorer 中的网格顶部【英文标题】:extjs 4.1 page scrolls to top of grid in internet explorer on row update 【发布时间】:2012-07-25 09:51:17 【问题描述】:

在我的网格上,我正在使用行编辑。

如果使用 Internet Explorer 10(也可能是其他版本)并且页面有滚动条

当我编辑一行并单击“更新”时,页面向上滚动到网格的开头。

这个问题在 4.1 上有很好的记录(虽然不是特别在 4.1 上)。

我已经看到像这样覆盖 rowModel 的问题

Ext.override(Ext.selection.RowModel, 
    onRowMouseDown: function(view, record, item, index, e) 
//        view.el.focus();
        this.selectWithEvent(record, e);
    
); 

我还看到将以下内容添加到网格中。

selModel: Ext.create('Ext.selection.Model',  listeners:  ),

这些选项都不适合我。

编辑 *

我已经尝试了“preserveScrollOnRefresh:true”,如下所示。但问题仍然存在。我在 Dropbox 上放了一个例子。要在 Internet Explorer 中重新创建它,您需要最小化浏览器并单击/编辑需要网格页脚的项目。

https://www.dropbox.com/s/l50d12t3cjq8kef/scrolling.htm

【问题讨论】:

【参考方案1】:

标准功能对我有用:

Ext.define('My.Grid', 
    extend: 'Ext.grid.Panel',

    viewConfig: 
        preserveScrollOnRefresh: true
    
);

【讨论】:

这个答案+1。在 Chrome 和 FF 中,我在 4.1 和 4.1.1 上也遇到了同样的问题。但这有帮助。 感谢 cmets。看起来非常正确。虽然它仍然无法在 Internet Explorer 上运行。【参考方案2】:

如果您正在使用 CellModel 或遇到其他解决方案的问题,此解决方案应该可以工作:

Ext.override(Ext.dom.Element, 
    focus: function (defer, dom) 
        var me = this,
            scrollTop,
            body;

        dom = dom || me.dom;
        body = (dom.ownerDocument || DOC).body || DOC.body;
        try 
            if (Number(defer)) 
                Ext.defer(me.focus, defer, me, [null, dom]);
             else 
                if (dom.tagName != 'DIV') 
                    if (dom.offsetHeight > Ext.dom.Element.getViewHeight()) 
                        scrollTop = body.scrollTop;
                    
                    dom.focus();
                    if (scrollTop !== undefined) 
                        body.scrollTop = scrollTop;
                    
                
            
         catch (e) 
        
        return me;
    
);

【讨论】:

以上是关于extjs 4.1 页面在行更新时滚动到 Internet Explorer 中的网格顶部的主要内容,如果未能解决你的问题,请参考以下文章

使用 ExtJS 4.1 保存一批记录时如何处理单个故障?

ExtJs 树面板。如何滚动到节点

ExtJS 4.1:模态窗口似乎在提交窗口之前返回控制

如何在 extjs 表单上保存滚动位置?

从 4.1 升级到 4.2 后无法访问 extjs 应用程序

从 Sencha ExtJS 4.0 迁移到 ExtJS 4.1