Javascript 将属性从嵌套模型映射到extjs表单视图
我有一个Javascript 将属性从嵌套模型映射到extjs表单视图,javascript,json,extjs,extjs4,Javascript,Json,Extjs,Extjs4,我有一个JSON像: { "id": "d258832c-c454-4961-9013-40ab222930d9", "name": "CDS_BU", "description": null, "parentId": null, "group": { "id": "ef01eb78-2ae0-43ed-844e-57a825b046eb", "name": "GroupForCDSBU2" } } 我有一个表单和该对象的视图,但加载时无法在表单中显示group.nam
JSON
像:
{
"id": "d258832c-c454-4961-9013-40ab222930d9",
"name": "CDS_BU",
"description": null,
"parentId": null,
"group": {
"id": "ef01eb78-2ae0-43ed-844e-57a825b046eb",
"name": "GroupForCDSBU2"
}
}
我有一个表单
和该对象的视图,但加载时无法在表单中显示group.name
的当前值
当前表单从Ext.form.Panel
扩展而来,我正在使用initComponent
为表单赋值。即
me.items = [{
name: 'name',
xtype: 'textfield',
fieldLabel: "Name"
}, {
name: 'description',
xtype: 'textareafield',
fieldLabel: "Comments"
}]
此选项当前起作用,并显示说明
和名称
中的值
我为小组创建了一个模型,如:
Ext.define('GroupModel', {
extend: 'Ext.data.Model',
fields: [{
name: 'id',
defaultValue: null,
type: 'string',
useNull: true
}, {
name: 'name',
defaultValue: null,
type: 'string',
useNull: true
}]
});
父对象的另一个模型,我们将其命名为Parent
,如:
Ext.define('ParentEditModel', {
extend: 'Ext.data.Model',
fields: [
{
name: 'name',
defaultValue: ''
}, {
name: 'description',
defaultValue: ''
}
...
]
对于最后一个模型,我尝试了一种hasOne
关联
比如:
hasOne: {model: 'GroupModel', name: 'group' }
并在其中添加了一个新字段,其签名如下:
{name: 'groupName', mapping: 'group.name'}
显然,这不起作用,因为据我所知,这需要一个associationKey
,而我当前的模型中没有该键
简而言之,我如何将这两个参数(组:id、名称)映射到表单视图中的输入。在这种情况下,您不需要关联模型,您可以在父模型中使用映射,而不需要关联键或其他任何东西
下面是一个JSFIDLE:
我在嵌套JSON上也遇到了类似的问题,我尝试使用关联,关联本身起作用,但我无法将关联数据放入我的网格面板中,至少对于网格面板来说,不可能创建这样的映射。我知道您没有尝试使用网格面板,但我的解决方案可能会对您有所帮助。在我的情况下,我编写了一个函数,在将嵌套的JSON数据加载到存储之前将其展平,这是解决我的问题的最快捷、最无痛的解决方案,避免了使用关联。感谢@user2574678,这正是我正在做的,我添加了一个名为groupName
的属性和另一个groupExternalId
,把它设置为初始化,对我来说不起作用,但这是另一个问题。如果你想设置一个小提琴的例子,我今晚可以看一下。
Ext.define('ParentEditModel', {
extend: 'Ext.data.Model',
fields: [
{
name: 'name',
defaultValue: ''
}, {
name: 'description',
defaultValue: ''
}, {
name: 'groupName',
mapping: 'group.name'
}
...
]