0

Ext JS 4.1 を使用しています....

一部のフィールドのみが表示されますが、一連の Model インスタンスを表示するグリッドがあります。次に、編集用にレコード全体をフォームにロードするダブルクリック リスナーを作成します。ダブルクリックリスナーでは、サーバー呼び出しからの応答が表示される Firebug のネット表示に従って JSON データが返されていますが、hasMany アソシエーションにデータが表示されません。私のモデルに何か問題がありますか、それとも私はこれについて間違っていますか?

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 は「未定義」になります。

助言がありますか?

最終的な作業コードで更新: これは、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

多くの関連付けは、既定では関連付けられたレコードに解析されません。特にグリッドの場合 - それはフラットなデータ ビューであると想定されているためです。モデルのドキュメントでは、関連付けの設定方法が示されていますが、インスタンスの作成については何も説明されていません :) has many の使用法へのリンクがあります ( http://docs.sencha.com/ext-js/4-1/#! /api/Ext.data.association.HasMany ) モデル ドキュメントから。残念ながら、使用法はあなたが期待するものではありません。基本的に、ストアを呼び出してロードすることにより、オンデマンドでレコードをフェッチするように設計されています。

于 2012-12-12T17:41:40.263 に答える