2017-08-30 1 views
0

Je veux obtenir toutes les valeurs dans un tableau à deux dimensions et je suis sûr que je fais quelque chose dans ma configuration de modèle. Comment puis je faire ça?Comment analyser un tableau bidimensionnel Json dans Extjs 6.5.2?

Voici le code pour mon magasin:

Ext.define('Test.store.PathStore', { 
extend: 'Ext.data.Store', 
alias: 'store.PathStore', 
storeId:'PathStore', 
model : 'Test.model.PathModel', 
autoSync:true, 
proxy: { 
    type: 'ajax', 
    url:"url", 
    method:'GET', 
    reader: { 
     type: 'json', 
     rootProperty : '' 
    } 
} 
}); 

Voici le code pour mon modèle:

Ext.define('Test.model.PathModel', { 
extend: 'Ext.data.Model', 

fields: [ 
    {name:'CID', type:'auto'}, 
    {name:'NAME', type:'auto'}, 
    {name:'DEFAULT_NAME', type:'auto'}, 
    {name:'REPRESENTATIONS', type:'auto'} 
    ] 
}); 

Voici le code pour mon contrôleur:

onButtonClick: function (selModel, record, index, options) { 

    var pathStore = Ext.getStore('PathStore'); 
    pathStore.load({ 
     // Some params, 
     callback: function(records, success, response, options) { 
      if(success){ 
      var arr = Object.values(records[0].getData().DEFAULT_NAME); 
      console.log(records); 
      console.log(arr); 
      console.log(records[0].getData()); 
      //Something I Have To Do 
      } 
} 
scope: this 
}); 
} 

Voici le format mon Json:

[ 
 
    [ 
 
    { 
 
     "CID": 111111, 
 
     "NAME": null, 
 
     "DEFAULT_NAME": "Hello guys", 
 
     "REPRESENTATIONS": null, 
 
     "ALL_REPRESENTATIONS": [ 
 
     { 
 
      "cid": 111111, 
 
      "Name": "Hello", 
 
      "DefaultName": "guys", 
 
     } 
 
     ] 
 
    } 
 
    ], 
 
    [ 
 
    { 
 
     "CID": 2222222, 
 
     "NAME": null, 
 
     "DEFAULT_NAME": "Hello World", 
 
     "REPRESENTATIONS": null, 
 
     "ALL_REPRESENTATIONS": [ 
 
     { 
 
      "cid": 22222222, 
 
      "Name": "Hello", 
 
      "DefaultName": "World", 
 
     } 
 
     ] 
 
    } 
 
    ] 
 
]

Json Format

Je reçois [object Object] ou quelque chose d'autre dans DEFAULT_NAME, NAME et CID. Comment puis-je faire pour cela?

Merci à l'avance, Ben

+0

Le code que vous avez donné ci-dessus montre, vos points de PathStore pour modéliser Test.model.PathModel où votre nom de modèle est Test.model.Representation. – Shahbaz

+0

Autre que cela, si les champs DEFAULT_NAME, NAME et CID renvoient des données int ou string alors vous devez définir le type respectif dans le modèle au lieu de automatique pour tout – Shahbaz

Répondre

0

Une façon d'obtenir les données de le tableau imbriqué doit utiliser la configuration transform du lecteur.

L'objet de données brut (désérialisé) est transmis. La fonction de transformation renvoie un objet de données, qui peut être une version modifiée de l'objet de données original ou un objet de données entièrement nouveau.

reader: { 
    type: 'json', 
    rootProperty: '', 
    transform: function(data) { 
     return Ext.Array.map(data, function(nestedDataArray) { 
      return nestedDataArray[0]; 
     }); 
    } 
} 

De cette façon, vous vous débarrasser du tableau englobante et normaliser les données.

est ici un violon de travail: https://fiddle.sencha.com/#view/editor&fiddle/25ut

+0

Ça marche bien, merci beaucoup ~ –

0

Si vous avez un à plusieurs relaition dans votre modèle, utilisez la propriété « hasMany » dans la configuration du modèle:

Ext.define("Test.model.RepresentationModel", { 
    extend: 'Ext.data.Model', 
    fields: [ 
     'cid', 'Name', 'DefaultName' 
    ], 
    belongsTo: 'Test.model.PathModel' 
}); 

Ext.define('Test.model.PathModel', { 
    extend: 'Ext.data.Model', 

    fields: [ 
     {name:'CID', type:'auto'}, 
     {name:'NAME', type:'auto'}, 
     {name:'DEFAULT_NAME', type:'auto'}, 
     {name:'REPRESENTATIONS', type:'auto'} 
    ], 

    hasMany: {model: 'Test.model.RepresentationModel', name: 'ALL_REPRESENTATIONS'}, 
}); 
+0

Quelle partie résout le problème? S'il vous plaît élaborer. – MarthyM