Ext.formPanel 使用关闭按钮复制内容

Posted

技术标签:

【中文标题】Ext.formPanel 使用关闭按钮复制内容【英文标题】:Ext.formPanel duplicates the content using close button 【发布时间】:2017-06-28 15:46:38 【问题描述】:

我正在使用 ExtJS 3.2(必须在这个版本的 ExtJS 中)。当我在里面显示一个带有表单面板的面板时,一切看起来都很好,但是当我使用右上角的 [X] 按钮关闭面板并再次打开时,每个字段标签都会出现两次,并且文本字段会消失。如果我使用“取消”按钮,显示正确。

我的代码:

    function crearDoc(idControl) 
        f = new Ext.FormPanel(
            frame: true,
            id: 'formFicheroCrear',
            layout: 'fit',
            defaults: minWidth: 500,
            items: [
                      xtype : 'hidden',
                      id : 'idFichero'
                   ,
                    
                       xtype: 'panel',
                       layout: 'form',
                       id: 'formReal',
                       width: '100%',
                       items: [xtype: 'datefield',
                               disabled: true,
                               allowBlank : false,
                               fieldLabel: 'Fecha',
                               value : new Date(),
                               format: 'd/m/Y',
                               width: '100%',
                               id: 'fechaDoc',
                               allowBlank: false,
                          xtype: 'textfield',
                           fieldLabel: 'Titulo',
                           allowBlank : false,
                           width: '100%',
                           id: 'nombreDoc',
                          xtype: 'textfield',
                            fieldLabel: 'Descripcion',
                            allowBlank : false,
                            width: '100%',
                            id: 'descripcionDoc']
                   ,xtype: 'panel',
                       layout   : 'fit',
                       items: [xtype: 'htmleditor',
                           id: 'editorHTML',
                           allowBlank : false,
                           name: 'documentoTexto']
                   ],
            buttons: [
                //Guardar documento SGSI
                text: '<bean:message key="label.boton.guardarySubir"/>',
                minWidth: 100,
                cls : 'x-btn-text-icon',
                iconCls : 'yes-icon',
                listeners:
                    'close':function(win)
                             console.info('bye');
                     ,
                    'hide':function(win)
                             console.info('just hidden');
                     

            ,
                handler: function() 
                    // Comprobamos que el formulario esté OK
                    if (f.getForm().isValid()) 
                       var nombreDoc =  Ext.getCmp("nombreDoc").getValue();
                       var descripcionDoc =  Ext.getCmp("descripcionDoc").getValue();
                       var editorHTML =  Ext.getCmp("editorHTML").getValue();

                         Ext.Ajax.request(
                                 
                    url: '/<bean:message key="global.application.context.name"/>/SGSI.do',
                    params: "method": "crearDocumento",
                           "docTitulo": nombreDoc,
                           "docDescripcion" : descripcionDoc,
                           "docCuerpo" : editorHTML,
                           "idProyecto" :  Ext.getCmp('idProyecto').getValue(),
                           "idControl" : idControl
                    )
                    ventanaCrearDocumento.close()
                    storeDocumentos.loadData(json);
                    Ext.getCmp('formFichero').getForm().reset()
                     else 
                        Ext.Msg.alert('<bean:message key="label.sincronizador.atencion"/>',
                                        '<bean:message key="label.error.campos.rojo"/>');
                    

                ,
                 text : '<bean:message key="label.boton.cancelar"/>',
                    cls : 'x-btn-text-icon',
                    iconCls : 'no-icon',
                    minWidth: 100,
                    handler: function() ventanaCrearDocumento.close()]
        );

        f.load(
            url : '/<bean:message key="global.application.context.name"/>/SGSI.do',
            params : 
                "method" : 'dameControlPorId',
                "idControl" : idControl,
                "idProyecto" : Ext.getCmp('idProyecto').getValue()
            ,
            method : 'POST'
        );
    var ventanaCrearDocumento = new Ext.Window(
            height: 460,
            width: 700,
            closable: true,
            closeAction : 'hide',
            modal: true,
            title: 'Redacción de Documento',
            layout: 'fit',
            items: f
        );
        ventanaCrearDocumento.show();
 

【问题讨论】:

【参考方案1】:

您指定了closeAction : 'hide',,这就是它不会自动销毁的原因。 将该属性指定为close 将解决问题。

【讨论】:

我完全是瞎子,没看到。谢谢! 这是我的荣幸。【参考方案2】:

您正在通过调用函数 crearDoc(idControl) 创建新的表单对象。您需要在按下关闭按钮时将其销毁,因此请设置 autoDestroy : true。 或定义表单并将其设置为在单击按钮上隐藏和显示表单。

【讨论】:

以上是关于Ext.formPanel 使用关闭按钮复制内容的主要内容,如果未能解决你的问题,请参考以下文章

idea服务关不掉的问题

如何呈现响应式 Ext.form.TextArea

怎样使对话框关不了

如何保存工具按钮开/关选择的状态?

打开游戏GeForce Experience出现的提示怎么关

制作一个单一的按钮睡眠/唤醒 Windows 10 [关闭]