我的网格有很高的行,如下所示:https://fiddle.sencha.com/#view/editor&fiddle/2581
默认情况下,单击网格行时,行会滚动到视图中。出于某种原因,我不希望这样。它应该被选中/聚焦,但如果它已经部分可见,则不会滚动到视图中。
以我的例子为例,滚动使第一个和第二个之间的边界位于屏幕中间。单击任一行,它将滚动到视图中,我必须从另一行看到的值不再可见。
如何防止自动化?
答案 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));