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
Odpowiedz
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
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.
jako od docs, jeśli Twoje źródło danych podało, możesz zadzwonić pod numer getTotalCount
, aby uzyskać rozmiar zestawu danych.
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)"
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()
}
});
jej przedmiot, próbowałem .length i to nie działa – Grigor
jaki jest Twój JsonStore coraz załadowany (proxy, sklep. loadData, dane inline)? – Ballsacian1