【发布时间】:2011-12-16 00:51:27
【问题描述】:
我继承了一个大型 ExtJS3 代码库,并且有一个 Ext.grid.CellSelectionModel 的 beforecellselect 的“基础”覆盖。我正在截断大量代码,但这应该提供一个总体思路:
Ext.override(Ext.grid.CellSelectionModel, {
init:function() {
Ext.grid.CellSelectionModel.superclass.init.apply(this, arguments);
if (this.unselectableColumns || this.visuallyMimicRowSelection || this.colSpecificHandlers){
this.on('beforecellselect', function(selModel, rowIndex, columnIndex){
//etcetera
然而,随后我们将实例化一个 CellSelectionModel,并在其上指定一个 beforecellselect 侦听器,如下所示:
var sm = new Ext.grid.CellSelectionModel({
listeners: {
beforecellselect : {
fn: function(selModel, rowIndex, colIndex) {
//etcetera
问题是,在新 CellSelectionModel 实例的侦听器中,我还需要调用覆盖中定义的侦听器。因为 ExtJS 似乎保留了一组同名事件侦听器,所以我可以按如下方式进行委托:
selModel.events.beforecellselect.listeners[1].fn.apply(selModel, arguments);
好的,我知道我不应该对索引进行硬编码。但除此之外,还有更好、更 ExtJS-y 的方法吗?
【问题讨论】:
-
监听器被添加(从监听器在你提到的监听器数组中可以看出),而不是被替换,所以你不需要做任何事情来调用原始监听器。事件触发时应调用所有侦听器。我认为覆盖可能有问题。
标签: extjs datagrid event-handling dom-events extjs3