2013-02-27 5 views
2

mes données JSON ressemble à ceci:ExtJS 4: obtenez record stocker des valeurs

({"success": "true", "message" : "OK","data":[{"id_metric":"1","name_filter":"doc filter","type_guicomp":"combobox"},{"id_metric":"1","name_filter":"severity","type_guicomp":"combobox"}]}) 

Je voudrais être en mesure de récupérer la valeur du champ "type_guicomp" pour la "id_metric" = 1, de sorte que le résultat serait: "type_guicomp":"combobox" et "type_guicomp":"combobox" .

Je fais cela parce que j'ai besoin de la valeur "combobox" pour l'assigner à une variable. J'ai essayé plusieurs choses, y compris:

myStore.load({ 
     scope: this, 
     callback : function(record, operation, success) { 
      console.log(record); 
      console.log(record.data); 
      } 

Et:

var index = Ext.StoreMgr.lookup("myStore").findExact('id_metric',1); 
var rec = Ext.StoreMgr.lookup("myStore").getAt(index); 
console.log(rec); 

Ces solutions retour undefined ou null. Alors, quand je l'ai fait dans le rappel:

var i = myStore.getCount(); 
console.log(i); 

Il est revenu 0. Mais quand je vérifie la sortie de json, ce n'est pas vide et il y a des données dedans.

Qu'est-ce que je fais mal? S'il vous plaît toute aide serait appréciée.

EDIT

Mon magasin ressemble à ceci:

Ext.define('Metrics.store.MyStore', { 
extend: 'Ext.data.Store', 
model: 'Metrics.model.MyModel', 
autoLoad: true, 
idProperty: 'id_metric', 
proxy : { 
    type : 'ajax', 
    actionMethods : 'POST', 
    node : 'id_metric', 
    api : { 
    read : 'gui_comp_items.php' //the php script that gets data from db 
    }, 
    reader: { 
     type: 'json', 
     successProperty: 'success', 
     messageProperty: 'message', 
     root: 'data' 
    } 
} 
}); 

Mon modèle:

Ext.define('Metrics.model.MyModel', { 
extend: 'Ext.data.Model', 
fields: [ 
{name : 'id_metric', type : 'int'}, 
{name : 'name_filter', type : 'string'}, 
{name : 'type_guicomp', type : 'string'}, 
{name : 'value', type : 'string'}] 
}); 
+1

à quoi ressemble votre magasin et votre maquette de modèle? – Geronimo

+0

Je les ai ajouté à mon message. – salamey

+1

Pour autant que je m'en souvienne, idProperty n'est pas la propriété du magasin, mais le modèle envisage de le déplacer là-bas et avec cela vous renvoyez deux id_metric avec la même valeur, donc cela ne semble pas unique. De plus, vous pouvez raccourcir le code 'Ext.getStore ('MyStore'). FindRecord ('id_metric', 1)'. Double vérifier la réponse avec firebug ou autre, s'il n'y a pas d'erreur comme un problème avec le décodage. Pour l'instant, essayez de décharger des données dans la fonction de rappel de chargement, car vous pourriez les récupérer avant même d'avoir été chargés. –

Répondre

1

Ce que je ne comprends pas est la façon dont vous avez utilisé myStore. Vous l'avez utilisé dans les deux sens en tant que chaîne et en tant que variable. Lequel est-ce? Si c'est une chaîne, alors myStore.load() ne fonctionnera pas. Si c'est une variable, vous devez perdre les guillemets sur Ext.StoreMgr.lookup(myStore). Où la variable de magasin est-elle déclarée?

+0

J'ai déclaré: 'var myStore = this.getMyStore();' – salamey

+0

Avez-vous créé le magasin et le modèle en utilisant Ext.create? D'après ce que je comprends, ce ne sont que des définitions, vous devez les créer une fois qu'elles ont été définies. – Aashray

+1

J'utilise l'architecture Extjs 4 MVC, le magasin et le modèle sont définis puis utilisés par le contrôleur. Je ne pense pas que ce soit le problème. – salamey

0

Si vous utilisez la requête ajax vous pouvez obtenir id_metric ... regardez la fonction de succès.

Ext.Ajax.request({ 
    url : 'blabla.tml', 
    method:POST,                  
    params : { 
     item : Data 
    }, 
    success : function(response) { 
     var res = response.responseText;                   
     alert(Ext.decode(res)); 
     var jsonData = Ext.decode(res); 
     var data = jsonData.data; // here data will contain ur data with root data.  

Vous pouvez charger les données ici maintenant

Ext.getStore('Mystore').loadData(data);            
    } 
}); 

Et vous utilisez le mystore pour charger ... est votre storeId de MyStore: mystore, ont juste un regard à la fois à elle.

0

Il se peut très bien que vous confondiez le magasin en ayant 2 objets avec le même identifiant. (Votre code JSON affiche "id_metric": "1" deux fois).

Cependant, la conversion automatique vers le modèle échoue probablement. Essayez de faire:

var model = Ext.create("Metrics.model.MyModel", {"id_metric":"1","name_filter":"doc filter","type_guicomp":"combobox"}); 

pour voir ce que le modèle ressemble et si elle est en mesure de créer une instance.

Si cela fonctionne (vous êtes donc en mesure de créer un modèle), explorez votre magasin pour voir si les données s'y trouvent réellement. Rechercher ceci:

myStore.proxy.reader.jsonData 

En outre, comme l'a souligné dans les commentaires, le idProperty est une propriété de modèle, vous annonciez dans votre modèle.