2011-04-23 3 views
1

Pour des raisons internes, je dois renvoyer du serveur au combo de la chaîne JSON suivante:ExtJS combobox - obtenir JSON valeurs plus profondes

{"root":[{"employeeId":1,"user":{"userName":"admin"}}]} 

Comme vous pouvez le voir, l'utilisateur est en fait un objet, tout façon que la liste déroulante sera en mesure de le lire?
le combo est configuré comme suit:

 ,displayField:'user.userName' 
      ,title:'Manager' 
      ,xtype: 'numberfield' 
      ,hiddenName: 'employeeId' 
      ,valueField : 'employeeId' 

le magasin:

var store = new Ext.data.JsonStore({ 
    autoLoad: true, 
    url: "/some_data", 
    root: 'root', 
    methos:'POST', 
    fields:[{name:"employeeId"},{name:"user.userName"}] }); 

le poste render wont il, toute solution pour cela?

Répondre

1

Utilisez le « mapping » propriété sur les champs dans votre magasin pour remapper les valeurs « profondes » aux noms simples ComboBox peut alors faire référence:

new Ext.form.ComboBox({ 
    fieldLabel: 'Manager', 
    hiddenName: 'employeeId', 
    store: new Ext.data.JsonStore({ 
     root: 'root', 
     url: '/some_data', 
     method: 'POST', 
     fields: [ 
      {name: 'employeeId'}, 
      {name: 'userName', mapping: 'user.userName'} 
     ] 
    }), 
    displayField: 'userName', 
    valueField: 'employeeId' 
}); 
+0

Merci mais je reçois « l'utilisateur n'est pas défini », même malgré elle est défini .... – fatnjazzy

+0

Je soupçonnerais alors que l'un des enregistrements dans la réponse JSON pourrait manquer la propriété de l'utilisateur. Un exemple plus complet montrant les données JSON complètes et comment il est chargé dans le magasin serait utile. – owlness