我有一个我真的无法解决的问题。这是我的目标:我想将 Tab 动态添加到TabPanel
. 我创建了我自己的组件EmpruntsTabPanel()
,当我创建它时,我只需要提供一个数组并EmpruntsTabPanel()
创建 count(array)) 选项卡。这完美地工作。所以我做了另一个组件,DossierPanel
.
这一个,一旦加载,就会动态创建EmpruntsTabPanel()
。这完美地工作。错得好。这在第一次加载时完美运行。我做了一个按钮来重新加载DossierPanel
(见下面的代码)。我调用完全相同的代码(因为它在同一个事件中),并且我检查过:它是相同的 URL,结果是相同的。所以:
- 为什么它第一次工作,如果
reload
没有? - 相反,如果第一次有效,为什么第二次无效?
也许这与代码有关
var res = action.result;
var tab = Ext.getCmp('tab_emprunts_'+this.id_dossier);
tab.removeAll(true);
tab.add( new EmpruntsTabPanel( res.data.emprunts ) );
这是我的组件(为了清楚起见,我删除了很多textfield
组件):
DossierPanel = Ext.extend(Ext.form.FormPanel, {
closable: true,
autoScroll:true,
initComponent : function(){
var n = this.id_dossier;
this.title = n;
this.id = 'id_dossier_'+this.id_dossier;
this.bodyStyle = 'padding:15px';
this.labelWidth = 150;
this.items = [{
xtype:'tabpanel',
plain:true,
activeTab: 0,
/* (!) Pour qu'un onglet qui n'est pas affiché soit
* quand même calculé, il faut faire :
* deferredRender: false
* C'est très important lorsqu'on fait des fiches
* avec plusieurs onglets.
*/
deferredRender: false,
defaults:{bodyStyle:'padding:10px'},
items:[{
title:'Détails personnels',
layout:'form',
autoHeight: true,
defaults: {width: '99%'},
defaultType: 'textfield',
items: [{
xtype:'datefield',
fieldLabel: 'Date premier contact ',
name: 'DATE1ERCONTACTJMA',
readOnly: true,
format:'d/m/Y'
}]
},{
title:'Adresse',
layout:'form',
autoHeight: true,
defaults: {width: '95%'},
defaultType: 'textfield',
items: [{
fieldLabel: 'Adresse 1 ',
name: 'ADRESSE1'
}]
},{
id: 'tab_emprunts_'+this.id_dossier,
title:'Emprunts',
layout:'form',
autoHeight: true,
defaults: {width: '99%'},
defaultType: 'textfield',
items: []
}]
}];
this.buttonAlign = 'left';
this.buttons = [{
text: 'Recharger',
handler: function() {
this.getForm().load( {
url: '/ws/cellulemedicale/jsonEditDossier.php',
params: {
id_dossier: this.id_dossier
},
waitTitle: 'Patientez',
waitMsg: 'Rafraichissement',
failure:function(form, action) {
},
scope: this
} );
},
scope: this
}];
this.on('actioncomplete', function (form,action) {
if (action.type=='load') {
if(typeof action.result != 'undefined') {
console.log( 'load finished' );
console.log( res.data.emprunts );
var res = action.result;
var tab = Ext.getCmp('tab_emprunts_'+this.id_dossier);
tab.removeAll(true);
tab.add( new EmpruntsTabPanel( res.data.emprunts ) );
}
}
});
DossierPanel.superclass.initComponent.call(this);
}
});