我有简单的'gridpanel'和'tbar'就像这样
Ext.define('Ext.abc.grid', {
extend: 'Ext.grid.Panel',
type:1,
tbar:[
{
text:'title1',
class :'a1',
handler:function(type){
if (this.type == 1) { // button not 1
Ext.query(".a2").setDisabled(false);
}
},{
text:'title2',
class :'a2',
handler:function(type){
if (this.type == 1) { // button not 1
Ext.query(".a1").setDisabled(false);
}
}
]
});
我尝试将类(a1)添加到按钮title1,将一些添加到title2,但是当我得到类
时Ext.query(".a1").setDisabled(false);
它不能正常工作
当我点击title1时我无法获得type = 1,我使用this.type但结果是'button'而不是1
我怎么能这样做,谢谢
答案 0 :(得分:1)
你在这里遇到了几个问题。
首先,看看sha的回答,你在调用Ext.query(...)
后得到一个数组。
其次,Ext.query
返回Ext.dom.Element
,它们是Ext对象,用于表示div,img等实际DOM元素。您要访问的按钮是Ext.Component
。您可以使用Ext.ComponentQuery
查询组件。
然后,您在按钮处理程序函数中使用this.type
,但是当调用这些方法时,this
将成为按钮本身(可以使用scope
选项进行自定义),而不是您设置type: 1
的容器。
编辑:
以下是如何使您的示例工作:
Ext.define('Ext.abc.Grid', {
extend: 'Ext.grid.Panel'
,type: 1
,tbar: [{
text: 'title1'
,itemId: 'button1'
// just FYI, here the scope (this) is the window, because we are not
// in a method
,scope: this // so this doesn't work
,handler: function() {
// using ComponentQuery to get a reference to the other components
var grid = this.up('grid'), // by xtype
tbar = this.up(), // by relative position
button2 = tbar.down('#button2'); // by itemId
if (grid.type === 1) {
button2.disable();
}
}
}, {
text: 'title2'
,itemId: 'button2'
,handler: function() { ... }
}]
});
现在,阅读你的想法,这是我认为你真正想做的事情:
Ext.define('Ext.abc.Grid', {
extend: 'Ext.grid.Panel'
,type: 1
,tbar: [{
text: 'title1'
,itemId: 'button1'
}, {
text: 'title2'
,itemId: 'button2'
}]
// reading in your mind, I guess, this is what you really want to do:
,initComponent: function() {
this.callParent();
if (this.type === 1) {
this.down('#button2').disable();
} else {
this.down('#button1').disable();
}
}
});
答案 1 :(得分:0)
Ext.query返回一个数组http://docs.sencha.com/extjs/4.1.3/#!/api/Ext-method-query
您不能简单地在数组上调用setDisabled()
。你需要遍历所有元素。