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'
   }
   ...
   ]