2012-06-12 9 views
8

la mia domanda è come ottenere i metadati oltre totalRecords, nel mio caso è la versione, il codice, SearchQuery (si prega di guardare JSON).Come configurare ExtJS 4 Store (proxy e reader) di leggere i metadati

{ 
"result": { 
    "version":"1", 
    "code":"200", 
    "searchquery": "false", 
    "totalRecords": "2", 
    "account":[ 
      { 
       "lastname": "Ivanoff", 
       "firstname": "Ivan", 
       "accountId":"1" 
      }, 
      { 
       "lastname": "Smirnoff", 
       "firstname": "Ivan", 
       "accountId":"2" 
      } 
     ] 
} 

}

Ecco il mio modello:

Ext.define("test.Account", { 
    extend: "Ext.data.Model", 
    fields: [ 
     {name: 'accountId', type: 'string'}, 
     {name: 'lastname', type: 'string'}, 
     {name: 'firstname', type: 'string'}  
    ] 
}); 

e memorizzare:

Ext.define("test.TestStore", { 
    extend: "Ext.data.Store", 
    model: "test.Account", 
    proxy: { 
     type: "ajax", 
     url: "users.json", 
     reader: { 
      type : 'json', 
      root : 'result.account', 
      totalProperty: "result.totalRecords" 
     } 
    }, 

    listeners: { 
     load: function(store, records, success) { 
      console.log("Load: success " + success);  
     } 
    } 
}); 

Utilizzando questo negozio sono in grado di caricare i record (account) e non riesco a trovare alcuna metodi per accedere al resto dei campi.

Grazie in anticipo.

risposta

1

Date un'occhiata a Ext.data.Proxy classe e più specificamente processResponse() metodo. Se è necessario estrarre dati aggiuntivi, sarà necessario estendere la classe standard e modificare tale metodo.

+0

ho controllato classe proxy. http://docs.sencha.com/ext-js/4-1/#!/api/Ext.data.proxy.Proxy - non trovando il metodo 'processResponse()' lì. ne sto trovando uno in Ext.form.action.Action. Puoi rendere questa risposta un po 'più chiara. – Jom

+0

controllo classe 'Ext.data.proxy.Server' a 4.0.7 (penso che OP ha ExtJs4 non 4.1 - ma dovrebbero essere relativamente simili) – sha

+0

grazie per la punta con il metodo processResponse ma sto lavorando con la versione 4.1 e ha deciso non toccare i file framework. Tuttavia ho trovato un'altra soluzione per il mio problema. La classe Proxy ha un evento afterRequest, gestendo questo evento posso ottenere dati di risposta con tutto il campo metadati. – barmaleikin

17

Ecco la soluzione per il mio problema. Sto gestendo l'evento afterRequest nella classe Proxy dove posso ottenere i dati di risposta, analizzarli e salvare i metadati. Questo fa parte del proxy della classe TestStore:

Così qui è parte di proxy dalla classe TestStore:

proxy: { 
     type: "ajax", 
     url: "/users.json", 
     reader: { 
      type : 'json', 
      root : 'gip.account', 
      totalProperty: "gip.totalRecords", 
      searchquery: "searchquery" 
     }, 
     afterRequest: function(req, res) { 
      console.log("Ahoy!", req.operation.response);  
     } 
    } 
+0

puoi contrassegnarlo come risposta! – Jom

+0

Sì, questo è il modo corretto per farlo. – Reimius

3

E 'possibile utilizzare l'evento 'metachange' del negozio.

Tutte le informazioni specifiche non extjs possono essere raggruppati in JSON nell'oggetto separata:

{ 
    "result": { 
     "totalRecords": "2", 
     "account":[ 
      { 
       "lastname": "Ivanoff", 
       "firstname": "Ivan", 
       "accountId":"1" 
      }, 
      { 
       "lastname": "Smirnoff", 
       "firstname": "Ivan", 
       "accountId":"2" 
      } 
     ] 
    }, 
    "myMetaData": { 
     "version":"1", 
     "code":"200", 
     "searchquery": "false" 
    } 
} 

Il link è configurato come

Ext.define("test.TestStore", { 
    extend: "Ext.data.Store", 
    model: "test.Account", 
    proxy: { 
     type: "ajax", 
     url: "users.json", 
     reader: { 
      type : 'json', 
      root : 'result.account', 
      totalProperty: "result.totalRecords", 
      metaProperty: 'myMetaData' 
     } 
    }, 

    listeners: { 
     metachange: function(store, meta) { 
      console.log("Version " + meta.version + "Search query " + meta.searchQuery);  
     } 
    } 
}); 
Problemi correlati