2014-03-06 11 views
0

什麼是對以下情形的最佳實踐和設計方法:模型協會,1個請求填充2個組件的最佳實踐

  1. 有一個JSON已經從有關於人與他們的信息服務器返回地址
  2. 我需要顯示一個人的一般信息和每個地址列表的表格。
  3. 在這個列表中,每個地址都是列表中的一個項目是強制性的,因爲它會多選真實以做其他事情。

我所做的是:

一)定義模型「假面」用的hasMany關係「Direccion」(西班牙語爲地址),我的代理是這裏的模型

b )定義一個模型「Direccion」

c)定義一個列表並嘗試使用itemTpl配置來顯示每個itemList的1個地址,但到目前爲止,我只能在同一個itemList中顯示給定人的所有地址。 有沒有辦法做到這一點?

鑑於這種情況,這種方法是否正確?

我試圖只做1個請求,只有1個商店來填寫這2個組件,但現在我對此有所懷疑。

那麼考慮到這種情況,最好的設計/實踐是什麼?

JSON響應

{ 
    "personas": [ 
     { 
      "id": 1, 
      "nombre": "jon", 
      "apellido": "caballero", 
      "direcciones": [ 
       { 
        "direccionId": 1, 
        "calle": "fco villa", 
        "colonia": "barona" 
       }, 
       { 
        "direccionId": 2, 
        "calle": "duraznos", 
        "colonia": "canutillo" 
       } 
      ] 
     } 
    ] 
} 

模式

Ext.define('Associations.model.Direccion', { 
    extend: 'Ext.data.Model', 

    config: { 
     idProperty: 'direccionId', 
     fields: [ 
      { name: 'calle', type: 'auto' }, 
      { name: 'colonia', type: 'auto' } 
     ] 
    } 
}); 




Ext.define('Associations.model.Persona', { 
    extend: 'Ext.data.Model', 
    requires: ['Associations.model.Direccion'], 
    config: { 
     fields: [ 
     { name: 'nombre', type: 'auto' }, 
     { name: 'apellido', type: 'auto' }, 
     ], 
     hasMany:[ 
     { 
      foreignKey: 'direccionId', 
      associationKey: 'direcciones', 
      name: 'direcciones', 
      model: 'Associations.model.Direccion' 
     } 

     ], 
     proxy: { 

      type:'ajax', 
      url: 'data/respuesta.json', 
      reader: { 
       type:'json', 
       rootProperty:'personas' 
      } 
     } 
    } 
}); 

商店

Ext.define('Associations.store.Persona', { 
    extend: 'Ext.data.Store', 
    requires: [ 
     'Associations.model.Persona' 
    ], 
    config: { 
     model: 'Associations.model.Persona', 
     autoLoad: true 
    } 
}); 

列表

Ext.define('Associations.view.PersonaList', { 
    extend: 'Ext.List', 
    xtype: 'personalist', 
    config: { 
     onItemDisclosure: true, 
     emptyText: 'No se encontraron personas', 
     store: 'Persona', 
     padding: 10, 
     margin: 10, 
     itemTpl : [ 
     '<tpl for="direcciones">', 
        '<li>Colonia {colonia}</li>', 
        '<li>Calle {calle}</li>', 
     '</tpl>', 
     ].join('') 
    } 

}); 

任何想法? 在此先感謝。

回答

0

當您執行model.load()並且模型與另一個模型具有hasMany關係時,將自動生成子對象的存儲,因此最好的方法是加載模型獲取子記錄的存儲並將其設置爲到名單。