如何获取 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()
方法公开该值。
当与 start
和 count
请求选项结合使用时,这可以让您拥有漂亮的 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 数据存储的项目计数(大小)?的主要内容,如果未能解决你的问题,请参考以下文章