一個面板包含3個項目。最後一個項目有一個事件處理程序attache。在處理程序中,新項目(小部件)被添加到父面板。在添加新項目之前,應刪除相同xtype的舊項目。Ext JS從其容器中移除GUI項目按xtype
這裏是行不通的例子:
Ext.define('Retroplanner.view.dimension.DimensionMapping', {
extend: 'Ext.form.Panel',
defaultListenerScope: true,
items: [{
xtype: 'component',
html: '<h3> Dimension Mappings</h3>',
},{
xtype: 'bm-separator'
},{
xtype: 'siRemoteCombo',
...
listeners: {
'select': 'onSiRemoteCombo'
}
}
],
onSiRemoteCombo: function(cmb, rec, idx) {
var item;
for(item in this.items){
//here item - is undefined,
//although this.items.length=3, as expected
//alert(item.xtype);
//isXType is not defined for undefined element:
if (item.isXType('propGrid')) {
this.remove(item);
break;
}
}
//the following code works as expected, if the previous is commented
var dimensionMapping = Ext.widget('propGrid');
this.items.add(dimensionMapping);
this.updateLayout();
}
});
我試圖用指標,但它也不起作用:
Ext.define('Retroplanner.view.dimension.DimensionMapping', {
...
defaultListenerScope: true,
items: [{
xtype: 'component',
...
},{
xtype: 'bm-separator'
},{
xtype: 'siRemoteCombo',
...
listeners: {
'select': 'onSiRemoteCombo'
}
}
],
onSiRemoteCombo: function(cmb, rec, idx) {
//the following code does not remove item in GUI interface.
if (this.items.length == 4)
this.remove(this.items[3], true);
var dimensionMapping = Ext.widget('propGrid');
this.items.add(dimensionMapping);
this.updateLayout();
}
});
我希望能夠通過移除項目xtype,沒有任何id或其他類型的引用。但是,如果這是不可能的,哪個是最好的辦法呢?從其容器中刪除GUI組件。
你應該只能夠做'this.remove(this.down( 'propGrid'))'在'onSiRemoteCombo() '方法。 –
它看起來像onSiRemoteCombo的範圍將是siRemoteCombo實例。 siRemoteCombo擴展了什麼?它是一個組合框嗎? –