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

时间:2012-07-25 09:51:17

标签: extjs4.1

在我的网格上,我正在使用划船。

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

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

这个问题已经很好地记录在案(虽然没有特别针对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

2 个答案:

答案 0 :(得分:4)

标准功能适用于我:

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

    viewConfig: {
        preserveScrollOnRefresh: true
    }
});

答案 1 :(得分:1)

如果您正在使用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;
    }
});