2010-10-30 7 views
3

J'ai un magasin json chargé, j'ai besoin de saisir un enregistrement de celui-ci. J'ai utilisé: getAt(index), find(), getById(), mais aucun résultat. Ceci est mon code:Obtenir des enregistrements de json store extjs

var appSettingReader = new Ext.data.JsonReader({  
       root: 'results', 
       },[ 
       {name: 'id', type: 'int', mapping: 'id'}, 
       {name: 'projetId', type: 'int', mapping: 'projetId'}, 
       {name: 'resLevels', type: 'int', mapping: 'resLevels'}, 
       {name: 'maxResToLock', type: 'int', mapping: 'maxResToLock'}, 
       {name: 'maxTimeToLock', type: 'int', mapping: 'maxTimeToLock'}, 
       {name: 'infosToPrint', type: 'string', mapping: 'infosToPrint'} 
       ]) 

var appSettingStore = new Ext.data.Store({ 
       proxy: new Ext.data.HttpProxy({ 
         url: 'inc/getSettings.php', 
         method: 'POST' 
        }), 
       baseParams:{task: "app"}, 
       reader : appSettingReader, 
       sortInfo:{field: 'id', direction: "DESC"} 
       }) 

appSettingStore.load(); 

Ce retour de code non défini:

console.log(appSettingStore.getAt(0)); 

console.log(appSettingStore.find("id","1")); 

Ceci est la chaîne JSON retournée du serveur:

{success:true,"results":[{"id":"1","projetId":"1","resLevels":"1","maxResToLock":"40","maxTimeToLock":"10","infosToPrint":"1_2_3_5","hotlineMail":"[email protected]"}]} 

J'ai aussi testé ce code:

var records = new Array()  
var test = appSettingStore.each(function(rec){ 
      records.push(rec) 
     }) 
console.log(records) 

et je reçois un tableau vide!

PS: Ce magasin n'est lié à aucun composant; Je veux juste lire et écrire.

+0

J'ai remarqué un problème que vous aurez. Dans l'objet Champs de votre JsonReader, vous déclarez un champ appelé "idProjet", mais votre serveur renvoie "projetId". Assurez-vous que ceux-ci correspondent pour obtenir les résultats souhaités. – McStretch

+1

c'était une erreur le problème pas résolu, je reçois le magasin bien chargé j'ai testé avec une grille ça marche! Je ne peux toujours pas utiliser find() ou une fonction de filtre – cranberies

+0

Quel était le problème, par curiosité? – timdev

Répondre

7

Vous devez placer un rappel sur le magasin, qui sera déclenché après son chargement. Vous pouvez ensuite utiliser les données selon vos besoins.

store.load({ 
    callback : function(r, options, success) { 
     console.log(r.data) 
    } 
}) 
1

Il semble que le serveur renvoie un fichier JSON invalide. Pourquoi votre script démarre la sortie du côté serveur avec « (»

?

Si ce n'est pas vraiment le problème, peut-être vous devriez envisager d'accepter plus de réponses à vos questions. Les gens seront plus susceptibles d'aider.

EDIT: Ok, donc vous êtes sûr que vous récupérez json valide à partir du serveur. Essayez d'ajouter une propriété 'success' à la sortie de votre serveur

Si cela ne fonctionne pas, vous aurez envie de Essayez d'ajouter une option de rappel au fichier .load() de votre boutique et regardez ce qui est passé dans le rappel. Cela devrait vous aider à comprendre où les choses vont mal. .

+0

non ce n'est pas le problème, merci iam attendre plus de réponses – cranberies

+0

il n'y a pas de problème dans la charge stor bien, je peux le lier avec une grille je ne sais pas où est le problème, je ne peux pas utiliser des méthodes de magasin pour trouver des enregistrements – cranberies