2011-02-22 77 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)

当然,添加选项时可能会添加选项,被解雇...