我的EXT JS 4模型数据在哪里?

时间:2012-12-12 17:31:19

标签: extjs

使用Ext JS 4.1 ....

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

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

Requests.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}
   ]
});

所以在控制台中我看到了项目,目的,状态和additionalInfo的值,但我得到了pointOfContacts的“undefined”。

有什么建议吗?

使用最终工作代码更新 这是我用来检索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');
}
....

1 个答案:

答案 0 :(得分:0)

默认情况下,没有多个关联被解析为关联记录。特别是对于网格 - 因为它应该是一个平面数据视图。 Model文档向您展示如何设置关联,但没有说明为您创建实例:) 模型文档中有许多(http://docs.sencha.com/ext-js/4-1/#!/api/Ext.data.association.HasMany)的使用链接。不幸的是,这种用法并不像你期望的那样。本质上,它旨在通过调用要加载的商店来按需获取记录。