2011-07-29 12 views
5

Mam sklep json, który zwraca wartości w formacie json. Teraz potrzebuję uzyskać liczbę wierszy/rekordów w łańcuchu json, ale gdy używam funkcji store.getCount(), zwraca ona 0, ale combobox jest wypełniany wierszami, a kiedy używam store.length, otrzymuję niezdefiniowany, prawdopodobnie dlatego, że nie jest już tablicą, jego powrót ze sklepu, który wywołuje skrypt php. Tak czy inaczej, jakie jest najlepsze podejście do tego problemu?ExtJS: Zwróć całkowitą liczbę wierszy/rekordów w sklepie json

+0

jej przedmiot, próbowałem .length i to nie działa – Grigor

+0

jaki jest Twój JsonStore coraz załadowany (proxy, sklep. loadData, dane inline)? – Ballsacian1

Odpowiedz

4

Spróbuj tego:

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

Ext.reg('myStore', myStore); 

a następnie za pomocą paneli wewnątrz:

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

Kiedy trzeba się liczyć wtedy można po prostu to zrobić:

Ext.getCmp('myStoreId').count 
3

Twoje odpowiedzi JSON z serwera, może być coś takiego ...

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

Następnie można użyć reader: { type : 'json', root : 'users', totalProperty : 'total', successProperty: 'success' } w obiekcie sklepu.

3

jako od docs, jeśli Twoje źródło danych podało, możesz zadzwonić pod numer getTotalCount, aby uzyskać rozmiar zestawu danych.

0

Mam ten sam problem, mogę uzyskać liczbę rekordów w myStore po zastosowaniu filtru.

zrobić to:

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) 

i uruchomić ten skrypt w ADD/obciążenia/usunąć/wyczyścić obsługi zdarzeń z myStore. mam wyjątek po

- "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

Jeśli używasz ajax proxy dla sklepu, czymś jak

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

a następnie załadować swój sklep jak store.load(); Tam zostanie wysłany Ajax asynchroniczne żądanie, więc należy sprawdzić licznik w zwrotnego jak ten

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() 
    } 
}); 
Powiązane problemy