Extjs Клонирование панели - PullRequest
2 голосов
/ 10 мая 2011

панель ({}) и все ее содержимое, такие как сетка, форма и хотите отобразить этот точный клон на другую панель, есть ли способ сделать это ... возможно ли это сделать с помощью panel.getEl () или есть любым другим способом ... пожалуйста, помогите

Ответы [ 2 ]

7 голосов
/ 05 сентября 2012

Ответ СРА неверен. Ext's cloneConfig делает именно то, что вы хотите. http://docs.sencha.com/ext-js/4-1/#!/api/Ext.Component-method-cloneConfig

Следующий код отображает две "одинаковые" панели на теле.

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();
1 голос
/ 10 мая 2011

Я должен признать, что старый ответ был не совсем верным.Клонирование компонентов доступно начиная с ExtJS2 и может быть выполнено через cloneConfig(overrides), который является методом экземпляра.

Это вернет клон текущего экземпляра с примененными переопределениями (если установлен).Чистый клон потребует от вас использования правильных конфигураций, что означает, что в конфигурации не будет создано ни одного экземпляра. Вот некоторая информация об этом Для получения более подробной информации прочитайте Руководства Сенчи


Старый ответ (действительно только есликомпоненты для клонирования конфигурации содержат экземпляры вместо простых конфигураций)

Нет, встроенного способа сделать это не существует.И тебе не стоит это пробовать.Попробуйте обернуть панель в функцию, которая возвращает его экземпляр (простой вид фабрики).

Редактировать

Примерно так:

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

Вы можете добавить столько параметров функции, сколько захотите.Это был бы чистый способ сделать это.Вы просто можете клонировать простой объект, как запись.Обратите внимание, что Factory - это пространство имен!

...