2009-10-27 52 views
5

我没有看到读取API,提供对接入的任何东西: http://api.dojotoolkit.org/jsdoc/1.3.2/dojo.data.api.Read如何获取dojo数据存储的项目数量(大小)?

+0

随着dojo.data.ItemFileReadStore你可以做: myStore._getItemsArray()长度 但这是特定于数据存储。我想知道获得商店大小的正确方法是什么。 – Arlo 2009-10-28 17:29:26

+0

这种方法比我最初想象的更加骇人听闻。在调用提取之前,数组不会被初始化。所以你必须确保在检查数组长度之前获取数据。 >>> store._getItemsArray()。长度 >>> store.fetch() 对象存储=对象 >>> store._getItemsArray()。长度 2 – Arlo 2009-10-28 17:46:41

回答

1

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

我已经实现

全部的店面预计数据包含totalCount属性,像这样:

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

该店保存该查询的时候返回(在onComplete)。然后通过商店上的getTotalCount()方法显示该值。

当与startcount请求选项一起使用时,这可以让你有很好的ajax分页(“Showing 1-50 of 525”)。

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

8

一个例子,在dojocampus演示的一种方式。这里fetch没有query参数返回存储中的所有项目。

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

我一直在寻找的答案,使用JsonRest店这个问题,这似乎是它:

在您的服务器,你应该看看 的Range头的知道哪些项目的要求回来。该 服务器应该与内容Range头回应,表示有多少被退回 项目和总项目存在多少:

Content-Range: items 0-24/66 

来源:http://dojotoolkit.org/reference-guide/dojo/store/JsonRest.html

0

下面的代码为我工作

// 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 
     }, 
    })