2

panel({}) 及其所有内容(如网格、表单)以及想要将确切的克隆呈现到另一个面板是否有办法做到这一点..是否可以使用 panel.getEl() 或有其他方法吗...请帮忙

4

2 回答 2

8

sra 的回答是不正确的。Ext 的 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();
于 2012-09-05T04:31:47.443 回答
1

我必须承认,旧的答案并不完全正确。组件的克隆从 ExtJS2 开始可用,并且可以通过cloneConfig(overrides)实例方法来完成。

这将返回具有应用覆盖(如果设置)的当前实例的克隆。干净的克隆将要求您使用正确的配置,这意味着不会在配置中创建任何实例。以下是有关此的一些信息有关更多详细信息,请阅读Sencha 指南


旧答案 (仅当要克隆配置的组件包含实例而不是普通配置时才有效)

不,没有内置的方法可以做到这一点。你不应该尝试它。考虑将面板包装在一个返回它实例的函数中(一种简单的工厂)。

编辑

像这样的东西:

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 是一个命名空间!

于 2011-05-10T13:14:56.990 回答