2011-02-22 91 views
1
someClass = Ext.extend(someOtherClass, 
    initComponent: function(){ 
     someFunction(); 
     this.on('exampleEvent', someFuntion2(), this); 
    }, 
    someFunction: function(){ 
     this.fireEvent('exampleEvent'); 
     return null; 
    } 
    //... 
} 

緊接着「this.fireEvent('exampleEvent');」 「返回null」得到執行還是「someFuntion2()」?爲什麼?發生事件後的執行順序

+3

如果`someFunction2`沒有返回一個函數,那麼這行應該是`this.on('exampleEvent',someFuntion2,this);`。 – 2011-02-22 17:34:34

回答

0

第一,第二個參數在這裏:

this.on('exampleEvent', someFuntion2(), this); 

應該是一個函數對象,並已實際執行someFunction2()在這裏......所以你可能想說:

this.on('exampleEvent', someFuntion2, this); 

(注意一些函數2後缺少的parens())

要回答你的問題,someFunction2將首先執行,因爲Observable在ExtJS中的工作方式。當你調用fireEvent('exampleEvent')時...... Observable類(someClass必須從繼承鏈中的某個點繼承)將遍歷所有添加了該事件的偵聽器的對象,並調用傳遞的Function對象在添加監聽器的時候 - 在你的情況下,一些函數2(沒有parens)

當然,添加選項時可能會添加選項,被解僱...