ExtJS和FormPanel:重新加载;t工作(通过相同的代码)

ExtJS和FormPanel:重新加载;t工作(通过相同的代码),extjs,tabpanel,Extjs,Tabpanel,我有个问题真的解决不了。 我的目标是:我想动态地将选项卡添加到TabPanel。 我已经创建了自己的组件EmpruntsTabPanel() 当我创建它时,我只需要给出一个数组和EmpruntsTabPanel()creates count(array))选项卡。 这很好用。 所以我做了另一个组件,DossierPanel 一旦加载,它就会动态创建EmpruntsTabPanel()。 这很好用。 呃,很好。它在第一次加载时就可以正常工作。 我制作了一个按钮来重新加载档案面板(见下面的代码)。

我有个问题真的解决不了。 我的目标是:我想动态地将选项卡添加到
TabPanel
。 我已经创建了自己的组件
EmpruntsTabPanel()
当我创建它时,我只需要给出一个数组和
EmpruntsTabPanel()
creates count(array))选项卡。 这很好用。 所以我做了另一个组件,
DossierPanel

一旦加载,它就会动态创建
EmpruntsTabPanel()
。 这很好用。 呃,很好。它在第一次加载时就可以正常工作。 我制作了一个按钮来重新加载
档案面板
(见下面的代码)。 我调用了完全相同的代码(因为它在同一事件中),并且我检查了:它是相同的URL,结果是相同的。 因此:

  • 如果
    重新加载
    不起作用,为什么它第一次起作用
  • 相反,如果它起作用 第一次,为什么不第二次
  • 也许这和代码有关

                var res = action.result;
                var tab = Ext.getCmp('tab_emprunts_'+this.id_dossier);
                tab.removeAll(true);
                tab.add( new EmpruntsTabPanel( res.data.emprunts ) );
    
    这是我的组件(为了清晰起见,我删除了很多
    textfield
    组件):


    进行初始加载的代码在哪里

    console.log(res.data.emprunts)在声明
    var res=action.result之前这是正确的吗?(您可能没有在日志中看到真实结果)

    在较高的级别上,如果加载时某些东西按预期工作,但不是在所有内容都呈现之后,我会查看在从表单中执行删除/添加魔术后是否需要调用
    form/container.doLayout()

    让我知道这是否有帮助

    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);
        }
    });