不要在焦点上将网格行滚动到视图中

时间:2017-08-17 10:00:53

标签: extjs

我的网格有很高的行,如下所示:https://fiddle.sencha.com/#view/editor&fiddle/2581

默认情况下,单击网格行时,行会滚动到视图中。出于某种原因,我不希望这样。它应该被选中/聚焦,但如果它已经部分可见,则不会滚动到视图中。

以我的例子为例,滚动使第一个和第二个之间的边界位于屏幕中间。单击任一行,它将滚动到视图中,我必须从另一行看到的值不再可见。

如何防止自动化?

3 个答案:

答案 0 :(得分:2)

要停止滚动,您可以在navigationModel网格中将{{1>}作为 对象

viewConfig

但是,它也会停止使用箭头键滚动网格。

答案 1 :(得分:0)

因此,正如ankit chaudhary告诉我们的那样,需要删除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
    }
}

并且鼠标点击时网格不再滚动。

答案 2 :(得分:-1)

对于焦点设置focusRow,无论你想要什么

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