在Ext JS中捕获网格行的长按或点击保持事件

Posted

技术标签:

【中文标题】在Ext JS中捕获网格行的长按或点击保持事件【英文标题】:Capture long press or tap hold event of grid row in Ext JS 【发布时间】:2018-05-01 08:51:27 【问题描述】:

我正在使用网格的 rowcontextmenu 事件在右键单击时显示一些在桌面上运行良好的选项。在 iPad 中,我想在长按上实现相同的功能,但我在 sencha 文档中发现了任何此类事件。我已经尝试过 jquery 长按插件,但无法实现。 我正在使用 Ext JS 3.4 版本。请有任何提示。

【问题讨论】:

【参考方案1】:

这些侦听器(至少)必须应用于Ext.grid.RowSelectionModel,以便这些事件在该特定范围内正确绑定。看到这个blog article;还有更多的 DOM 事件类型需要考虑。您要查找的事件称为 tapholdlongpress(请参阅“处理事件”的 Safari 文档)。

RowSelectionModel 的事件可以类似定义:

new Ext.grid.GridPanel(

    /**
     * one has to instance the default row-selection model explicitly,
     * in order to be able to configure it's event listeners ...
    **/
    sm: new Ext.grid.RowSelectionModel(
        singleSelect: true,
        listeners: 

            taphold: 'rowcontextmenu'

        
    )

);

也可以使用Ext.util.Observable 来调试事件;这很方便,尤其是在使用过时的框架时,它在多大程度上已经支持功能是相当值得怀疑的。

// to intercept all events:
Ext.util.Observable.prototype.fireEvent = 
Ext.util.Observable.prototype.fireEvent.createInterceptor(function() 
    console.log(this.name);
    console.log(arguments);
    return true;
);

// to capture the events of a particular component:
Ext.util.Observable.capture(
    Ext.getCmp('my-grid-component'), function(event) 
        console.info(event);
    
);

使用Ext.EventManager.addListener() 或.on(),可以定义任何缺少的框架事件。

【讨论】:

taphold 和 longpress 在 Ext 3 中不可用。我尝试了第二个选项,它给出了未定义错误的 createInterceptor。在调试时它有一个价值,但在框架中的某处执行它之后。 @Jaydeep 根据文档,Ext.util.Observable 至少应该存在......而使用Ext.EventManger 将浏览器事件定义为框架事件,因此它们变得已知并被触发(只有这样才能重新绑定它们,就像在第一个示例中一样)。将丢失的事件添加到过时的框架中是最少的让它们被触发...升级到更高版本的框架很可能需要进行一般的代码重构。 docs.sencha.com/extjs/3.4.0/source/… ...肯定是定义的;最终 Ext.getCmp() 被传递了一个错误的名字?也可以在控制台中测试它是否可以找到组件。 我传递的网格对象是正确的,createInterceptor 给出了一些错误。但是在调试时我可以看到该对象,在执行后它也在框架文件中给出错误..知道它为什么会这样吗?

以上是关于在Ext JS中捕获网格行的长按或点击保持事件的主要内容,如果未能解决你的问题,请参考以下文章

如何只屏蔽headerView上的长按事件

单纯使用js或者jq如何实现 手机web的长按事件 和按键事件

如何在长按或点击时获得点击文本?

ListView的长按事件和点击事件冲突的解决办法

Js实现移动端长按事件

JS 监听键盘上某个键的长按事件。