如何获取 dojo 数据存储的项目计数(大小)?

Posted

技术标签:

【中文标题】如何获取 dojo 数据存储的项目计数(大小)?【英文标题】:How do I get the item count (size) of a dojo datastore? 【发布时间】:2009-10-27 23:58:33 【问题描述】:

我在读取 API 中看不到任何提供访问权限的内容: http://api.dojotoolkit.org/jsdoc/1.3.2/dojo.data.api.Read

【问题讨论】:

使用 dojo.data.ItemFileReadStore 您可以执行以下操作: myStore._getItemsArray().length 但这是特定于该数据存储的。我想知道获取商店规模的正确方法是什么。 这种方法比我最初想象的还要骇人听闻。在调用 fetch 之前,该数组不会被初始化。因此,您必须确保在检查数组长度之前获取。 >>> store._getItemsArray().length 0 >>> store.fetch() Object store=Object >>> store._getItemsArray().length 2 【参考方案1】:

dojocampus 的示例演示了一种方法。这里没有query 参数的fetch 会返回商店中的所有商品。

var store = new some.Datastore();
var gotItems = function(items, request)
  console.log("Number of items located: " + items.length);
;
store.fetch(onComplete: gotItems);

【讨论】:

【参考方案2】:

dojo.data.api.Read 的 onBegin 函数有匹配的总大小:

function size(size, request)
  // Do whatever with the size var.


store.fetch(query: , onBegin: size, start: 0, count: 0);

从此快速入门:http://dojotoolkit.org/reference-guide/1.7/quickstart/data/usingdatastores/faq.html#question-6-how-do-i-get-a-count-of-all-items-in-a-datastore

【讨论】:

【参考方案3】:

任何数据存储的有线数据格式都是完全特定于存储的。为了让您获得总项目数(和其他元数据),它必须作为响应的一部分返回。这是进行服务器端分页的唯一方法。

我实现的所有商店都希望数据包含totalCount 属性,如下所示:


  identifier: 'id',
  items: [
     id: 123, name: 'aaa', ... ,
     id: 456, name: 'bbb', ... ,
    ...
  ],
  totalCount: 525

当查询返回(onComplete)时,商店会保存这个。然后通过 store 上的 getTotalCount() 方法公开该值。

当与 startcount 请求选项结合使用时,这可以让您拥有漂亮的 ajax 分页(“显示 525 中的 1-50”)。

由于这不是 API 的一部分,读取 API 的核心实现不实现它。这种技术的一种形式(类似于我所做的)似乎是由dojo.data.QueryReadStore 实现的,所以你也可以看看那里。

【讨论】:

【参考方案4】:

我正在使用 JsonRest 商店寻找这个问题的答案,似乎就是这样:

在您的服务器上,您应该查看 在请求中的 Range 标头处,以了解要返回哪些项目。这 服务器应以 Content-Range 标头响应以指示有多少 正在退回的物品以及总共有多少物品:

Content-Range: items 0-24/66

发件人:http://dojotoolkit.org/reference-guide/dojo/store/JsonRest.html

【讨论】:

【参考方案5】:

以下代码对我有用

  // questionStoreReader is a pointer that points to and can read ask.json file

  var questionStoreReader=new dojo.data.ItemFileReadStore(url:"ask.json");

  questionStoreReader.fetch(
   
     onComplete:function(items,request) // items is an array
      
        alert(items.length);// number of items in ask.json
      ,
   )

【讨论】:

以上是关于如何获取 dojo 数据存储的项目计数(大小)?的主要内容,如果未能解决你的问题,请参考以下文章

如何从移动本地存储引导 Dojo

如何用 Dojo 组织异步代码?

如何通过后端基于过滤器获取计数

如何将 Intern 添加到 Dojo 项目中?

如何使用 sql 中的单个查询获取项目计数和总计数?

如何从 DOJO 中的 Json 数组中获取数据?