繁体   English   中英

ExtJS:为嵌套对象的面板项设置默认值

[英]ExtJS: Setting defaults to panel items for nested objects

这个问题是如何为initComponent中的Grid列设置默认值的一部分,并通过主帖子上的@ scebotari66建议独立发布在此处。

您将在下面注意到; Ext.Array.map来定义相关功能的defaults

// Statment
    initComponent: function () {
    var me = this;
    me.items = Ext.Array.merge(
        me.getFormSt(),
        Ext.Array.map(me.getForm(), function (listFldConfig) { //Aim to using the array map function to set flex property for subset fields
            listFldConfig.flex = 1;
            return listFldConfig;
        }),
        me.getFormEnd()
    );
    me.callParent(arguments)
},

// Implementation
getForm: function () {
        var me = this;
        var form = [
            { // Array.map func. sets `flex` to this obj.
                xtype: 'fieldcontainer',
                layout: { type: 'vbox', align: 'stretch', pack: 'start' },
                items: [
                    {
                        xtype: 'fieldcontainer',
                        layout: 'hbox',
                        items: [
                            {
                                xtype: 'foofield',
                                //flex: 1 //But I need to set `flex` as default for this obj. in nested items array
                            },
                            {
                                xtype: 'barfield',
                                //flex: 1 //But I need to set `flex` as default for this obj. in nested items array
                            }

事情是该实现可以按预期工作,但是在这种情况下,我正在创建一个fieldcontainer对象,其中包含所有其他内容。 并且Array.map仅将flex config设置为第一个fieldcontainer obj。 我只需要为具有foofieldbarfield嵌套items定义flex config。

使用容器上的defaults配置定义defaults

xtype: 'fieldcontainer',
layout: 'hbox',
defaults: {
    flex: 1
},
items: [
    {
        xtype: 'foofield',
    },
    {
        xtype: 'barfield',
    }

要覆盖嵌套容器,您可以将多个defaults配置相互嵌套:

defaults: {
    defaults: {
        flex: 1
    },
    flex: 1
}

请注意,作为defaults对象一部分的xtype配置可能会导致不希望的结果,并且您应该使用defaultType配置来定义容器子元素的默认类型。

通过@NarendraJadhav的意见; 创建了我自己的结构...

定义;

Ext.define('MyApp.BaseFldCon', {
    extend: 'Ext.form.FieldContainer',
    xtype: 'basefldcon'
});

Ext.define('MyApp.VBoxFldCon', {
    extend: 'MyApp.BaseFldCon',
    xtype: 'vboxfldcon',
    layout: {
        type: 'vbox',
        align: 'stretch',
        pack: 'start'
    }
});

Ext.define('MyApp.HBoxFldCon', {
    extend: 'MyApp.BaseFldCon',
    xtype: 'hboxfldcon',
    layout: {
        type: 'hbox'
    },
    defaults: {
        flex: 1
    }
});

实施;

{
   xtype: 'vboxfldcon',
   items: [
            {
              xtype: 'hboxfldcon',
              items: [
                       {
                           xtype: 'foofield',
                        },
                        {
                           xtype: 'barfield'
                        },
                        {
                           xtype: 'foocombo'
                        }
                     ]
             },

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM