1

こんにちは、フォームを拡張しようとしています。このような commonItems のような補助プロパティを使用してアイテムを拡張できます..

Ext.define('PC.view.FormEvento', {
        extend:'Ext.form.Panel',
        id:'FormEvento',
        url:'controller/action',
        bodyPadding:10,
        commonItems:[
            {
                xtype:'hiddenfield',
                name:'id',
                value:0
            },
]});

..拡張されたアイテムのフォームと組み合わせると、このようになります

Ext.define('PC.view.FormEventoExtended', {
    extend:'PC.view.FormEvento',
    id:'FormEventoExtended',
    title:'Evento Extended',

    initComponent:function () {
        var me = this;

        Ext.applyIf(me, {
            items:me.commonItems.concat(
                [
                    {
                        xtype:'textfield',
                        fieldLabel:'personal1',
                        name:'personal1'
                    },
                    {
                        xtype:'textfield',
                        fieldLabel:'personal2',
                        name:'personal2'
                    }
                ])
        });
        me.callParent(arguments);
    }
});

ここで、基本フォームの commonItems を拡張フォームの個人用アイテムに連結します。Ext 4 でネイティブにするフォームはありますか?

4

2 に答える 2

3

これを行うネイティブな方法はわかりませんが、コンポーネントを拡張するすべてのクラスにメソッドbuildItemsを配置する「ベスト プラクティス」を好みます。これは、項目を含む配列を返します。

Ext.define('PC.view.FormEvento', {
    extend: 'Ext.form.Panel',
    id: 'FormEvento',
    url: 'controller/action',
    bodyPadding: 10,

    initComponent: function () {
        this.items = buildItems();

        this.callParent(arguments);
    },

    buildItems: function () {
        return [
            {
                xtype: 'hiddenfield',
                name: 'id',
                value:0
            },
        ];
    }
]});

このクラスから拡張すると、buildItems メソッドを上書きし、親を呼び出し、追加のアイテムを追加または挿入するだけで、アイテムの変更が簡単になります。

Ext.define('PC.view.FormEventoExtended', {
    extend: 'PC.view.FormEvento',
    id: 'FormEventoExtended',
    title: 'Evento Extended',

    buildItems: function () {
        var items = this.callParent(arguments);

        return Ext.Array.push(items, [
            {
                xtype:'textfield',
                fieldLabel:'personal1',
                name:'personal1'
            },
            {
                xtype:'textfield',
                fieldLabel:'personal2',
                name:'personal2'
            }
        ]);
    }
});

アイテムの数が増えると、buildFieldsetAddressItemsなどの追加のメソッドを作成するのが理にかなっています。これには、アイテムのリストが読みやすくなるという利点があります。

于 2013-08-29T12:06:04.903 に答える
2

You can simply write something like this in PC.view.FormEvento constructor:

initComponent: function() {
   var me = this;

   me.items.push({
      xtype:'hiddenfield',
      name:'id',
      value:0
   });
   me.callParent(arguments);
}

by the time this constructor will get called, object will already have items configured in the child object.

于 2012-07-30T16:36:56.183 に答える