2

私のグリッドでは、行編集を使用しています。

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」を試しました。しかし、問題はまだ残っています。ドロップボックスに例を載せました。Internet Explorer でこれを再作成するには、ブラウザーを最小化し、グリッドのフッターが必要な項目をクリック/編集する必要があります。

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

4

2 に答える 2

4

標準機能は私にとってはうまくいきます:

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

    viewConfig: {
        preserveScrollOnRefresh: true
    }
});
于 2012-07-25T16:22:37.330 に答える
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;
    }
});
于 2015-07-20T05:51:28.780 に答える