2011-07-29 25 views
5

Tengo una tienda json que devuelve los valores en formato json. Ahora necesito obtener el número de filas/registros en la cadena json, pero cuando uso la función store.getCount(), devuelve 0, pero el cuadro combinado se llena con filas, y cuando uso store.length me vuelvo indefinido, probablemente porque ya no es una matriz, su regreso de la tienda, que está llamando script php. De todos modos, ¿cuál es el mejor enfoque para este problema?ExtJS: devolver filas/registros totales en la tienda json

+0

su objeto, he intentado .length y no funcionó – Grigor

+0

¿Cómo es su JsonStore siendo cargado (proxy, tienda. loadData, datos en línea)? – Ballsacian1

Respuesta

4

Trate de hacer esto:

var myStore = Ext.extend(Ext.data.JsonStore, { 
    ... config..., 
    count : 0, 
    listeners : { 
    load : function(){ 
     this.count = this.getCount(); 
    } 
} 

Ext.reg('myStore', myStore); 

y luego usar paneles interiores:

items : [{ 
xtype : 'myStore', 
id : 'myStoreId' 
}] 

Siempre que necesite para obtener el recuento, entonces puede simplemente hacer esto:

Ext.getCmp('myStoreId').count 
3

Su respuesta JSON del servidor, puede haber algo como esto ...

{ 
    "total": 9999, 
    "success": true, 
    "users": [ 
     { 
      "id": 1, 
      "name": "Foo", 
      "email": "[email protected]" 
     } 
    ] 
} 

continuación, puede utilizar reader: { type : 'json', root : 'users', totalProperty : 'total', successProperty: 'success' } en su objeto de almacén.

3

Como desde docs si su fuente de datos proporcionó puede llamar al getTotalCount para obtener el tamaño del conjunto de datos.

0

tengo el mismo problema, puedo obtener el recuento de registros en myStore después de aplicar el filtro.

hago estas:

var _count = 0; 

var _filters = []; 

_filters = myStore.filters.items.map(function(item){ 

    return {property: item.property, value: item.value} 

}); 

myStore.clearFilter() 

_count = myStore.count() 

myStore.filter(_filters) 

console.log(_count) 

corro este script en add/carga/eliminar/controladores de eventos claros de miAlmacén. tengo una excepción después de

- "Uncaught TypeError: Cannot read property 'internalId' of undefined ext.js:39 
Ext.define.updateIndexes ext.js:39 
Ext.define.onAdd ext.js:39 
b.implement.callParent ext.js:39 
Ext.define.onAdd ext.js:39 
fire ext.js:39 
Ext.define.continueFireEvent ext.js:39 
Ext.define.fireEvent ext.js:39 
Ext.define.insert ext.js:39 
Ext.define.addSorted ext.js:39 
Ext.define.add ext.js:39 
Ext.apply.callback ext.js:39 
k ext.js:39 
Ext.define.processResponse ext.js:39 
b.implement.callParent ext.js:39 
(anonymous function) ext.js:39 
Ext.apply.callback ext.js:39 
Ext.define.onComplete ext.js:39 
Ext.define.onStateChange ext.js:39 
(anonymous function)" 
3

Si utiliza proxy Ajax para la tienda, como SMTH

proxy : { 
    type : 'ajax', 
    url : 'YOUR URL', 
    reader : { 
     type : 'json', 
     root : 'NAME OF YOUR ROOT ELEMENT', 
     totalProperty : 'NAME OF YOUR TOTAL PROPERTY' // requiered for paging 
    } 
} 

y luego cargar su tienda como store.load(); Será enviado Ajax solicitud asincrónica, lo que debe comprobar el recuento de devolución de llamada como esto

store.load({ 
    callback : function(records, operation, success) { 
     console.log(this.getCount());   // count considering paging 
     console.log(this.getTotalCount()); // total size 
     // or even 
     console.log(records.length);   // number of returned records = getCount() 
    } 
}); 
Cuestiones relacionadas