【问题标题】:How do I get the item count (size) of a dojo datastore?如何获取 dojo 数据存储的项目计数(大小)?
【发布时间】: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

标签: dojo


【解决方案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
                },
             })
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-08-02
            • 2023-03-30
            • 1970-01-01
            • 2016-01-14
            • 1970-01-01
            • 2020-01-08
            • 2023-03-17
            • 1970-01-01
            相关资源
            最近更新 更多