0

使用 Ext JS 4.1....

我有一个显示一堆模型实例的网格,尽管只显示了一些字段。然后我有一个双击监听器,我想将整个记录加载到一个表单中进行编辑。在双击侦听器中,我没有看到我的 hasMany 关联中的数据,尽管根据 Firebug 的网络显示正在返回 json 数据,我在其中看到来自服务器调用的响应。我的模型有问题还是我要解决这个问题?

请求.js

Ext.define('Request', {
    extend: 'Ext.data.Model',
    requires: ['PointOfContact'],
    fields: [
       {name: 'id', type: 'int'},
       {name: 'project', type: 'string'},
       {name: 'purpose', type: 'string'},
       {name: 'status'},
       {name: 'additionalInfo', type: 'string'}
    ],
    hasMany: [{
       model: 'PointOfContact',
       name: 'pointOfContacts',
       foreignKey: 'id',
       associationKey: 'pointOfContacts'
   }],
   proxy: {
      type: 'rest',
      url: '/web/project/rest/request/',
      reader: { type: 'json' },
      writer: { type: 'json' }
   }
});

PointOfContact.js

Ext.define('PointOfContact', {
  extend: 'Ext.data.Model',
  fields: [
    {name: 'id', type: 'int'},
    {name: 'fullName', type: 'string'},
    {name: 'email', type: 'string'},
    {name: 'phone', type: 'string'}
  ]
});

请求.js

Ext.define('Requests', {
  extend: 'Ext.data.Store',
  model: 'Request',
  autoLoad: true
});

RequestsView.js

Ext.define('RequestsView', {
  extend: 'Ext.grid.Panel',
  title: 'All Requests',
  store: 'Requests',
  viewConfig: {
     singleSelect: 'true',
     listeners: {
     itemdblclick: function(dataview, record, item, index, e) {
        console.log(record.get('project'));
        console.log(record.get('purpose'));
        console.log(record.get('status'));
        console.log(record.get('additionalInfo'));
        console.log(record.get('pointOfContacts'));
        var comp = Ext.ComponentQuery.query('requestForm');
        comp[0].getForm().loadRecord(record);
        var mainPanel = Ext.ComponentQuery.query('mainpanel');
        mainPanel[0].getLayout().setActiveItem('requestForm');
        }
      }
    },
   columns: [
      {header: 'Project', dataIndex: 'project', flex: 1},
      {header: 'Purpose', dataIndex: 'purpose', flex: 1},
      {header: 'Status', dataIndex: 'status', flex: 1}
   ]
});

因此,在控制台中,我看到了项目、目的、状态和附加信息的值,但我得到了 pointOfContacts 的“未定义”。

有什么建议么?

使用最终工作代码更新: 这是我用来检索 pointofContacts 并使用 pointOfContacts 在我的表单面板上加载网格的工作代码

...
itemdblclick: function(dataview, record, item, e) {
    var comp = Ext.ComponentQuery.query('requestForm');
    comp[0].getForm().loadRecord(record);
    Ext.getCmp('pocGrid').reconfigure(record.pointOfContacts());
    var mainPanel = Ext.ComponentQuery.query('mainpanel');
    mainPanel[0].getLayout().setActiveItem('requestForm');
}
....
4

1 回答 1

0

有很多关联默认不解析到关联记录中。特别是对于网格 - 因为它应该是一个平面数据视图。模型文档向您展示了如何设置关联,但没有说明为您创建实例的任何内容:) 有很多使用的链接 ( http://docs.sencha.com/ext-js/4-1/#! /api/Ext.data.association.HasMany)来自模型文档。不幸的是,用法不是您所期望的。本质上,它旨在通过调用存储来加载来按需获取记录。

于 2012-12-12T17:41:40.263 回答