点击“取消”后,我有一个包含一些按钮的窗口没有任何反应。 我真的很困惑我可能会出错:
Ext.define('Myapp.view.User.NewForm', {
extend: 'Ext.window.Window',
width: 610,
height: 380,
y: 50,
resizable: false,
closable: true,
draggable: false,
title: 'new user',
items: [{
buttons: [{
text: 'save',
iconCls: 'form-save'
},{
text: 'cancel',
iconCls: 'form-cancel',
scope: this,
handler: this.cancel
}]
}],
cancel: function() { alert('cancel'); }
})
答案 0 :(得分:2)
与Lolo一样,在定义Form类时,this.cancel
未定义。
此问题的标准解决方案是在items
内创建initComponent
数组:
Ext.define('Myapp.view.User.NewForm', {
...
initComponent: function() {
this.items = [{
buttons: [{
text: 'save',
iconCls: 'form-save'
},{
text: 'cancel',
iconCls: 'form-cancel',
scope: this,
handler: this.cancel
}]
}];
this.callParent();
},
cancel: function() { alert('cancel'); }
});
调用initComponent
时,this
指向您所希望的表单实例。在您的代码中this
指向没有包含取消功能的全局window
对象。
答案 1 :(得分:1)
您也可以这样定义窗口按钮
...
initComponent: function(){
this.buttons = [
{ text:'Close',
handler: function(){
this.up('window').close(); //<--Notice "this" refers to the button
}
},
{
text: 'Save',
action: 'save',
handler: this.save,
scope: this
}
]; //eo buttons
this.callParent(arguments);
}, //eo initComponent
save: function(){ ... }
...
答案 2 :(得分:0)
那是因为this.cancel未定义。看到这段代码:
var that = this;
Ext.define('Myapp.view.User.NewForm', {
items: [{
buttons: [{
text: 'save',
iconCls: 'form-save'
},{
text: 'cancel',
iconCls: 'form-cancel',
scope: this, // that === this
handler: this.cancel
}]
}],
cancel: function() { alert('cancel'); }
})
这传递给范围指向与该变量相同的对象。您必须找到其他方式来获取对父控件的引用。
您可以尝试:handler: function(){ this.ownerCt.ownerCt.cancel.apply(this, arguments); }
,然后移除scope: this
行。