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是不能获取的。
相关阅读:
转载于:https://blog.51cto.com/wangyuelucky/1345770