ExtJS:将默认设置设置为嵌套对象的面板项
ExtJS: Setting defaults to panel items for nested objects
这个问题是 的一部分,并且 post 通过 @scebotari66 在主要 post 上的建议独立地在此处提出。
正如您将在下面注意到的那样;有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
配置设置为第一个 fieldcontainer
obj。我只需要为具有 foofield
和 barfield
的嵌套 items
定义 flex
配置。
默认值是使用容器上的 defaults
配置定义的:
xtype: 'fieldcontainer',
layout: 'hbox',
defaults: {
flex: 1
},
items: [
{
xtype: 'foofield',
},
{
xtype: 'barfield',
}
要覆盖嵌套容器,您可以将多个 defaults
配置相互嵌套:
defaults: {
defaults: {
flex: 1
},
flex: 1
}
请注意,xtype
配置作为 defaults
对象的一部分可能会导致意外结果,您应该使用 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'
}
]
},
这个问题是
正如您将在下面注意到的那样;有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
配置设置为第一个 fieldcontainer
obj。我只需要为具有 foofield
和 barfield
的嵌套 items
定义 flex
配置。
默认值是使用容器上的 defaults
配置定义的:
xtype: 'fieldcontainer',
layout: 'hbox',
defaults: {
flex: 1
},
items: [
{
xtype: 'foofield',
},
{
xtype: 'barfield',
}
要覆盖嵌套容器,您可以将多个 defaults
配置相互嵌套:
defaults: {
defaults: {
flex: 1
},
flex: 1
}
请注意,xtype
配置作为 defaults
对象的一部分可能会导致意外结果,您应该使用 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'
}
]
},