Страница extjs 4.1 прокручивается до верхней части сетки в Internet Explorer при обновлении строки

В моей сетке я использую редактирование строк.

при использовании 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


person frosty    schedule 25.07.2012    source источник


Ответы (2)


У меня работает стандартная функция:

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

    viewConfig: {
        preserveScrollOnRefresh: true
    }
});
person Alex Tokarev    schedule 25.07.2012
comment
+1 за этот ответ. У меня была такая же проблема на 4.1 и 4.1.1, а также в Chrome и FF. Но это помогло. - person devOp; 05.09.2012
comment
спасибо за комментарии. Кажется, ты на правильном пути. Хотя он по-прежнему не работает в Internet Explorer. - person frosty; 12.09.2012

Если вы используете 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;
    }
});
person Alexey Fedorin    schedule 20.07.2015