Не прокручивать строку сетки в поле зрения в фокусе

У меня есть сетка с очень высокими строками, например: https://fiddle.sencha.com/#view/editor&fiddle/2581

По умолчанию при щелчке строки сетки она прокручивается в поле зрения. Мне почему-то этого не хочется. Он должен быть выбран/сфокусирован, но не прокручиваться в поле зрения, если он уже частично виден.

Возьмите мой пример и прокрутите так, чтобы граница между первым и вторым была посередине экрана. Щелкните любую строку, и она будет прокручена в поле зрения, а значения, которые я должен видеть из другой строки, больше не видны.

Как я могу предотвратить этот автоматизм?


person Alexander    schedule 17.08.2017    source источник


Ответы (3)


Чтобы остановить прокрутку, вы можете указать navigationModel как пустой объект в viewConfig сетки.

viewConfig: {
    navigationModel: {}
}

Но это также остановит прокрутку сетки с помощью клавиш со стрелками.

person Ankit Chaudhary    schedule 17.08.2017
comment
Спасибо за помощь. С его помощью я нашел полное решение и добавил его как еще один ответ. - person Alexander; 17.08.2017

Итак, как говорит нам Анкит Чаудхари, нужно удалить navigationModel. Я подумал, что navigationModel может быть полезен, и решил переопределить navigationModel, чтобы адаптировать его к моему требованию:

Ext.define('MyApp.override.NavigationModel', {
    override : 'Ext.grid.NavigationModel',

    scrollOnFocus: true,

    constructor: function(config) {
        this.callParent(arguments);
        if(Ext.isBoolean(config.scrollOnFocus)) this.scrollOnFocus = config.scrollOnFocus;
    },
    onCellMouseDown: function(view, cell, cellIndex, record, row, recordIndex, mousedownEvent) {
        var actionableEl = mousedownEvent.getTarget(this.isFocusableEl, cell);
        if (!this.scrollOnFocus && !view.actionableMode && mousedownEvent.pointerType !== 'touch' && mousedownEvent.position.column.cellFocusable !== false && !actionableEl) return;
        this.callParent(arguments);
    },

    onItemMouseDown: function(view, record, item, index, mousedownEvent) {
        var me = this,
            scroller;

        if (!mousedownEvent.position.cellElement && (mousedownEvent.pointerType !== 'touch')) {
            if (!view.enableTextSelection) {
                mousedownEvent.preventDefault();
            }

            me.attachClosestCell(mousedownEvent);

            if (me.scrollOnFocus && !me.position.isEqual(mousedownEvent.position)) {
                me.setPosition(mousedownEvent.position, null, mousedownEvent);
            }

            scroller = view.getScrollable();

            if (scroller) {
                scroller.restoreState();
            }
        }
    }
});

Теперь я могу добавить в viewConfig моей сетки настраиваемый navigationModel:

viewConfig: {
    navigationModel:{
        type:'grid',
        scrollOnFocus: false
    }
}

и сетка больше не прокручивается по щелчку мыши.

person Alexander    schedule 17.08.2017

Для фокусировки установите focusRow куда хотите

grid.view.focusRow (grid.store.getAt (0));

person Jasmin Solanki    schedule 17.08.2017