Я унаследовал большую кодовую базу ExtJS3, и существует «базовый» переопределение Extcell до выбора CellEelectionModel. Я усекаю огромные фрагменты кода, но это должно дать общую идею:
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-й способ сделать это?