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

Posted

技术标签:

【中文标题】ExtJS:返回 json 存储中的总行/记录【英文标题】:ExtJS: return total rows/records in json store 【发布时间】:2011-07-29 19:35:40 【问题描述】:

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

【问题讨论】:

它是一个对象,我试过 .length 但它不起作用 您的 JsonStore 是如何加载的(代理、store.loadData、内联数据)? 【参考方案1】:

试试这个:

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

【讨论】:

【参考方案2】:

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


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

然后你可以在你的 store 对象中使用reader: type : 'json', root : 'users', totalProperty : 'total', successProperty: 'success'

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

如果你为商店使用ajax代理,smth like

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

然后像这样加载您的商店 存储.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()
  
);

【讨论】:

以上是关于ExtJS:返回 json 存储中的总行/记录的主要内容,如果未能解决你的问题,请参考以下文章

如何从 extjs 存储中获取 JSON 数组中的属性值?

如何在extjs的网格页脚中添加总行

如何将静态 JSON 从 PHP 返回到 extjs 存储

ExtJS:: 如何过滤网格中的行,但不在存储中

ExtJs Json 存储

从 ExtJS 4 中的存储重新加载数据