1

私はExtJs4を使用しており、以下のjsonがありました。それをExtjsモデルにマッピングするときにいくつかの問題があります:

    {
      "success": true,
      "data": {
        "bairro": "Vila Paulista",
        "cep": "86730-000",
        "convenio_id": 52,
        "nome": "Peter Parker",
        "consultas": [
          {
            "data": "08/08/2008",
            "paciente_id": 200,
            "senha": null
          },
          {
            "data": "22/02/2010",
            "paciente_id": 200,
            "senha": null
          },
        "convenio": {
          "id": 52,
          "nome": "C80"
        }
      }
    }

これが私のモデルです:

Ext.define('App.model.vo.Paciente', {
    extend: 'Ext.data.Model',
    requires: [
        'App.model.vo.Consulta',
        'App.model.vo.Convenio'
    ],
    fields: [
        {name: 'id', type: 'auto'},
        {name: 'bairro', type: 'auto'},
        {name: 'cep', type: 'auto'},
        {name: 'convenio_id', type: 'auto'},
        {name: 'nome', type: 'auto'}
    ],
    belongsTo: { 
        model: 'App.model.vo.Convenio', 
        name: 'convenio', 
        foreignKey: 'convenio_id', 
        getterName: 'getConvenio'},
    hasMany: { 
        model: 'App.model.vo.Consulta', 
        name: 'consultas'},
        idProperty: 'id',
    proxy: {
        type: 'rest',
        url : '/pacientes',
        format: 'json',
        reader: {
            root: 'data',
            successProperty: 'success'
        },
        writer: {
            getRecordData: function(record) {
                return { paciente: record.data };
            }
        }
    }
});

データをロードするには:

App.model.vo.Paciente.load(id, {
        success: function(rec) {
            console.log(rec.consultas());
            console.log(rec.getConvenio());
        }
    });

rec.consultas() はすべての子レコードを適切に表示しますが、 rec.getConvenio() はサーバーにデータを再度取得するように要求します。

この場合、json ファイルに既にあるデータを使用する必要があります。

    "convenio": {
      "id": 52,
      "nome": "C80"
    }

ありがとう。

4

1 に答える 1

1

私はただ宣言しなければなりませんでした:

{name: 'convenio', type: 'auto'}

私のモデルでbelongsToのものを削除します。

于 2013-03-10T01:09:42.010 に答える