2011-07-29 20 views
5

Json formatında değer döndüren bir json deposu var. Şimdi json dizesinde satır/kayıt sayısını almam gerekir, ancak store.getCount() işlevini kullandığımda 0 döndürür, ancak combobox satırlarla doldurulur ve ben store.length kullanıyorum, undefined olsun, muhtemelen artık bir dizi değil, php komut dosyasını arayan mağazadan dönüyor. Her neyse, bu problem için en iyi yaklaşım nedir?ExtJS: json deposundaki toplam satır/kayıtları döndür

+0

onun bir nesne gibi geri aramasında sayısını kontrol etmelisiniz böylece , ajax asenkron isteği vardır gönderilecektir i .length çalıştı ve JsonStore (vekil, mağaza yüklü oluyor Nasıl – Grigor

+0

işe yaramadı. loadData, satır içi veri)? – Ballsacian1

cevap

4

bu deneyin

Ext.getCmp('myStoreId').count 
3

sunucudan Kişisel Json tepkisi

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

Sonra mağaza nesnesinde reader: { type : 'json', root : 'users', totalProperty : 'total', successProperty: 'success' } kullanabilirsiniz ... böyle bir şey olabilir.

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

Ext.reg('myStore', myStore); 

ve ardından iç panelleri kullanmak:

3

Farklı: o zaman basitçe yapabilirsiniz sayım sonucuna varmak için gerektiğinde

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

Veri kaynağınız varsa docs'dan veri seti boyutu almak için getTotalCount numaralı telefonu arayabilirsiniz.

0

Aynı sorunu yaşıyorum, filtreyi uyguladıktan sonra myStore'da kayıt sayısını sayabilirim.

ben bu yapın:

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/MyStore net olay işleyicileri/kaldır ekleme/yükte bu komut dosyasını çalıştırın.

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

bu depo için ajax vekil kullanırsanız, ( store.load gibi mağaza yüklemek sonra

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

gibi Tavsiyen ve sonra I) bir istisna var; Bu

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() 
    } 
});