extjs - 防止网格面板的键盘多选

标签 extjs extjs4.1 keyboard-events extjs-mvc gridpanel

我想要一个单一的选择网格,起初我没有包括任何选择模型配置,因为那是 the default .这适用于鼠标选择,但如果我键入 SHIFT + END,它会选择所有记录(或 PAGE UPHOMEEND 有类似的效果)。

然后,如果不重新加载网格,则无法取消选择所选记录(除非我想要一个配置有 allowDeselect: true 的网格 - 我不想要)。

认为这是 ExtJS 文档的默认问题,然后我使用 SINGLE 显式选择配置了 gridpanel,但问题仍然存在。

我查看了他们的一些示例网格 here , 他们都有同样的问题 - 任何单选网格都会阻止鼠标多选,但可以使用 shift 键和 HOME, END, PAGE UP< 进行多选PAGE DOWN。然后不可能取消选择记录。

似乎是框架中的一个错误,我会提交一份报告,但由于网格是最常用的组件之一,我认为有人对此有解决方法。

无奈之下,我也尝试在全局范围内收听 keypress 并停止事件,但这甚至无法做到。例如,这将记录到控制台,但事件仍然运行:

Ext.getDoc().on('keypress', function(event, target) {
    var key = event.getKey();

    // do not allow multiple grid selection
    if (event.shiftKey && (
        key == event.PAGE_UP ||
        key == event.PAGE_DOWN ||
        key == event.HOME ||
        key == event.END)) {

        console.log('unsuccessfully trying to stop the event!');
        event.stopEvent();
        event.stopPropagation();
        event.shiftKey = false;
        return false;
    }
});

编辑:

我不想使用 enableKeyNav: false 禁用所有键盘导航,我只是不想使用键盘进行多选。

最佳答案

您可以使用:

selModel: {
    enableKeyNav: false
},

在网格配置中。 但这对我来说是意想不到的选择模型行为......

更新

作为一个非常简单的版本:

selModel: {
    selectRange: function() {
        return false;
    }
},

关于extjs - 防止网格面板的键盘多选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14639779/

相关文章:

javascript - 动态添加文本区域到容器extjs

file-upload - EXTJS MVC 中的文件上传字段

executable - 如何使用 AutoHotkey 创建独立的 exe?

extjs - 如何在Ext JS中查找包含多个指定类的组件?

javascript - 在不执行页面重新加载的情况下重新初始化 Sencha Touch 应用程序

extjs4.1 - 如何获取正在扩展的类的名称

c# - 唯一标识罗技统一键盘(在 C# 中)

javascript - 从 Javascript Chrome 应用程序触发系统范围的键盘事件

ajax - 如何使用Ext.Ajax登录Spring Security?

javascript - ExtJS 4 数据 View 问题