Extjs Clonación de un panel

panel ({}) y todo su contenido como cuadrícula, formulario y desea renderizar ese clon exacto en otro panel, ¿hay alguna manera de hacerlo ... es posible hacerlo con panel.getEl () o hay alguna otra manera? ...por favor ayuda

preguntado el 10 de mayo de 11 a las 12:05

2 Respuestas

Debo admitir que la vieja respuesta no era del todo correcta. La clonación de componentes está disponible desde ExtJS2 y se puede realizar a través de cloneConfig(overrides) que es un método de instancia.

Esto devolverá un clon de la instancia actual con las anulaciones aplicadas (si está configurado). Un clon limpio requerirá que uses configuraciones correctas, lo que significa que no se crean instancias dentro de la configuración. Aquí hay algo de información sobre esto. Para más detalles lea el Guías sencha


Respuesta antigua (solo es válido si los componentes para clonar configuraciones contienen instancias en lugar de configuraciones simples)

No, no hay forma de hacer esto. Y no deberías intentarlo. Considere envolver el panel en una función que devuelva una instancia del mismo (una especie de fábrica simple).

Editar

Algo como esto:

Factory.Panel = function (config) {
    var defaults = {
        labelWidth: 80,
        labelAlign: 'left',
        layout: 'form',
        width: 720,
        autoHeight: true,
        header: false,
        bodyStyle: 'padding:10px 15px;'
    };
    var cfg = Ext.apply({}, config, defaults);
    var cmp = new Panel(cfg);
    return cmp;
}

Puede agregar tantos parámetros de función como desee. Esta sería una forma limpia de hacerlo. Simplemente puede clonar un objeto simple como un registro. ¡Tenga en cuenta que Factory es un espacio de nombres!

contestado el 23 de mayo de 17 a las 15:05

hola, ¿qué quieres decir con la instancia de un panel ... también incluirá el contenido del panel ... puedes explicar un poco más, incluso un pequeño ejemplo sería útil ... gracias - maya

hola ... probé tu ejemplo, pero parece que solo se clona el panel, ¿qué pasa con los elementos del panel ... cómo clono esos ...? maya

Para aclarar una cosa; en realidad no se clona, ​​esto es mucho más una fábrica. Si tiene más elementos anidados, no sé, debe incluirlos en una 'fábrica' propia a la que llama el otro o debe implementarlos como 'xtypes' para que ExtJS pueda procesarlos. - SRA

La respuesta de la sra es incorrecta. CloneConfig de Ext hace exactamente lo que usted quiere. http://docs.sencha.com/ext-js/4-1/#!/api/Ext.Component-method-cloneConfig

El siguiente código representa dos de los "mismos" paneles en el cuerpo.

var panel = Ext.create('Ext.Panel', {
    width: 500,
    height: 300,
    title: "HBoxLayout Panel",
    layout: {
        type: 'hbox',
        align: 'stretch'
    },
    renderTo: document.body,
    items: [{
        xtype: 'panel',
        title: 'Inner Panel One',
        flex: 2
    },{
        xtype: 'panel',
        title: 'Inner Panel Two',
        flex: 1
    },{
        xtype: 'panel',
        title: 'Inner Panel Three',
        flex: 1
    }]
});

var clone = panel.cloneConfig();

Respondido el 05 de Septiembre de 12 a las 08:09

@sra Clone the current component using the original config values passed into this instance by default. Available since: Ext 2 - por favor

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.