在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 事件类型需要考虑。您要查找的事件称为 taphold
或 longpress
(请参阅“处理事件”的 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中捕获网格行的长按或点击保持事件的主要内容,如果未能解决你的问题,请参考以下文章