2009-10-27 11 views
5

私はこれへのアクセスを提供する読み取りAPIには何も表示されません。 http://api.dojotoolkit.org/jsdoc/1.3.2/dojo.data.api.Readdojoデータストアのアイテム数(サイズ)を取得するにはどうすればよいですか?

+0

あなたがすることができるために働い: myStore._getItemsArray()長さ しかし、これは、そのデータストアに特定です。私は店のサイズを取得する正しい方法が何であるか疑問に思っています。 – Arlo

+0

この方法は私が最初に思ったよりもはるかにハッキリです。フェッチが呼び出されるまで配列は初期化されません。したがって、配列の長さを調べる前に必ずフェッチする必要があります。 >>> store._getItemsArray()。長さ 0 >>> store.fetch() オブジェクトストア=オブジェクト >>> store._getItemsArray()。長さ 2 – Arlo

答えて

1

データストアのワイヤデータのフォーマットは、完全にストア固有です。アイテムの総数(および他のメタデータ)を取得するには、レスポンスの一部として返さなければなりません。これは、サーバーサイドページネーションを実行する唯一の方法です。問い合わせは(onCompleteに)返すとき

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

ストア、これを保存しますので、は次のように

私が実装されているすべての店舗は、データがtotalCount属性が含まれていることを期待しています。値は、店舗のgetTotalCount()メソッドを介して公開されます。

startcountリクエストオプションと組み合わせて使用​​すると、素晴らしいAjaxページネーション(「525の1-50を表示」)が可能になります。

これはAPIの一部ではないため、読み取りAPIのコア実装では実装されていません。このテクニックの形式(私が行ったことに似ています)はdojo.data.QueryReadStoreによって実装されているようですので、おそらくそこにも見ることができます。私はJsonRestストアを使用して、この質問への答えを探していた、これはそれのようです

8

dojocampusでは、1つの方法を示します。ここでfetchを指定しないと、queryパラメータはストア内のすべての項目を返します。

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年代 サーバが返され、どのように多くの合計の項目が存在するされているどのように多くの の項目を示すためのContent-Rangeヘッダに応答しなければなりませんこのクイックスタートから

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

機能onBegin試合の合計サイズを持っています。
0

次のコードは、dojo.data.ItemFileReadStoreで私

// 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 
     }, 
    }) 
関連する問題