ExtJS:返回json存储中的总行/记录

时间:2011-07-29 19:35:41

标签: javascript json extjs combobox

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

4 个答案:

答案 0 :(得分:4)

试试这个:

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

答案 1 :(得分:3)

来自服务器的Json响应可能是这样的......

{
    "total": 9999,
    "success": true,
    "users": [
        {
            "id": 1,
            "name": "Foo",
            "email": "foo@bar.com"
        }
    ]
}

然后,您可以在商店对象中使用reader: { type : 'json', root : 'users', totalProperty : 'total', successProperty: 'success' }

答案 2 :(得分:3)

docs开始,如果您提供了数据源,则可以调用getTotalCount来获取数据集大小。

答案 3 :(得分:3)

如果您对商店使用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()
  }
});