ExtJS:返回json商店中的总行数/记录

问题描述:

我有一个以json格式返回值的json商店。现在我需要获取json字符串中的行数/记录数,但是当我使用store.getCount()函数时,它返回0,但组合框中填充了行,并且当我使用store.length时,我得到未定义,可能是因为它不再是数组,它从商店返回,这是调用PHP脚本。无论如何,这个问题最好的办法是什么?ExtJS:返回json商店中的总行数/记录

+0

它的一个对象,我想。长度又是怎样的你JsonStore得到加载(代理,卖场没有奏效 – Grigor

+0

。 loadData,内联数据)? – Ballsacian1

尝试了这一点:

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

Ext.reg('myStore', myStore); 

然后用内板:每当你需要得到计数,那么你可以简单地做到这一点

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

Ext.getCmp('myStoreId').count 

从服务器你的JSON响应,可以是这样的......

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

然后你就可以在你的存储对象使用reader: { type : 'json', root : 'users', totalProperty : 'total', successProperty: 'success' }

由于从docs如果您提供的数据源可以拨打getTotalCount来获取数据集大小。

我有同样的问题,我可以在应用过滤器后在myStore中记录计数。

我做这些:

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) 

我运行在添加/加载这个脚本/删除/的MyStore明确的事件处理程序。 我有一个异常后

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

如果您使用的商店Ajax代理,像水木清华

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

,然后加载您的商店一样 store.load(); 有将发送Ajax的异步请求,所以你应该在回调检查计数这样

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