我已經繼承了一個大的ExtJS3代碼庫,並且在cellselect之前有一個Ext.grid.CellSelectionModel的「基本」重寫。我截取的代碼龐大的大片,但本應提供的總體思路:重新定義ExtJS事件並委託到之前的實現
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的方式嗎?
監聽器被添加(可以看到監聽器位於您提到的監聽器數組中),而不是被替換,因此您不需要執行任何操作即可調用原始監聽器。所有聽衆應該在事件發生時接到電話。我想可能有一些錯誤。 – pakman