ps:ext版本2.1


背景:用jasmine做Ext应用的单元测试,触发按钮点击动作,结果没有任何的反应。


1.正常情况:


之所以不爽是因为,之前调用是没有问题的,调用代码如下:

formLogin._buttonLogin.fireEvent('click');


button代码,如下:

// button
this._buttonLogin = new Ext.Button({
     text: ' 登 陆 ',
     disabled: true,
     minWidth: 70
});
                                                                                              
// button onClick事件
this._buttonLogin.on('click', this._onButtonLogin_Click);
                                                                                              
this._onButtonLogin_Click = function (sender, e) {
     // do something..
};


2.有问题的情况:


调用代码如下:

var bidBut = fillBidResultListGridPanel._buttonBidResult,
    res = bidBut.fireEvent('click');


button代码:

this._buttonBidResult = new Ext.Button({
        minWidth: 100,
        text: '录入中标结果',
        panel: this,
        handler: function () {
            var selects = this.panel._selects.get(); // 注意
            // do something ..
        }
});


3. 从上面的两个例子,很容易看出端倪。例1中绑定了事件和作用域,所以直接fire没有问题;例2中没有绑定事件,直接fire不能把scop传进去,导致调用失败。


4.Ext自己的调用方式如下:

// private
onClick : function(e){
       // do something..
       this.fireEvent("click", this, e); // 方式1
       if(this.handler){
           this.handler.call(this.scope || this, this, e); // 方式2
       }
},


5.例2修改后的代码:

var res = bidBut.handler.call(bidBut); // 正常
var res = bidBut.fireEvent('click',bidBut); // 还是不行?


应该两种方式都是能调用的,但是只有call的方式可行,在研究。


不过有个问题就是鼠标e是不能获取的。


相关阅读:

http://www.sencha.com/forum/showthread.php?25677-2.0.1-fireEvent(-click-)-on-buttons-don-t-call-handler-function