У меня есть проблема, которую я действительно не могу решить.Вот моя цель: я хочу динамически добавлять вкладки в TabPanel
.Я создал свой собственный компонент с именем EmpruntsTabPanel()
, и когда я его создаю, мне просто нужно дать массив, а EmpruntsTabPanel()
создает счетчик (массив).Это работает отлично.Итак, я сделал еще один компонент, 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);
}
});