2

panel({})とそのグリッド、フォームなどのすべてのコンテンツで、その正確なクローンを別のパネルにレンダリングしたい場合は、それを行う方法があります。panel.getEl()を使用して行うことは可能ですか、それとも他の方法がありますか。 ...助けてください

4

2 に答える 2

8

sraの答えは正しくありません。ExtのcloneConfigは、まさにあなたが望むことを実行します。 http://docs.sencha.com/ext-js/4-1/#!/api/Ext.Component-method-cloneConfig

次のコードは、2つの「同じ」パネルを本体にレンダリングします。

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

私は古い答えが完全に正しくなかったことを認めなければなりません。Componmentsのクローン作成は、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は名前空間であることに注意してください!

于 2011-05-10T13:14:56.990 に答える