dgrid を JsonRest で動作させようとしています。JSON データを返す Perl ベースのサーバー側コンポーネントを実装しました。応答データは次のようになります。
{"id:": 00016, "num": 00016, "range": "15 - 63 (49)", "uid": "0", "ipaddress": "xx.xx.xx.xx", "hostname": "", "referer": "http:\/\/www.facebook.com\/l.php?u=http%3A%2F%2Fasisaid.com%2Fjournal%2Farticle%2F1604.html&h=8e20f", "useragent": "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8", "date":1281010282000}
これらのハッシュ「行」はそれぞれ配列内にあります。dgrid が読み込まれると、Range ヘッダーなしでサーバー コンポーネントにクエリが実行され、サーバー コンポーネントはデフォルトの範囲のデータを返します。次に、dgrid は「Range: items=0-24」で再度クエリを実行します。応答として、サーバーはエントリ 1 ~ 25 をリストされた形式で応答ヘッダー「Content-Range: items 0-24/470」と共に提供します。
dgrid が次の 40 項目を要求すると、問題が発生します。「Range: items=23-63」を要求し、サーバーは要求を正常に満たします (データが取得されたことを示す WebKit 開発者ツールを使用して確認できます)。ただし、dgrid 自体をスクロールすると、行 1 ~ 25 が表示され、行 40 にジャンプします。スクロールし続けると、470 エントリすべてをロードする方向に進みますが、グリッドが移動し始め、行が劇的に増加します。順不同 (たとえば、グリッドは行 8 から始まり、行 1 は行 75 の後に表示されます)。
おそらく、JSON データに明確に一意の ID が含まれていなかったことが原因だと考えたので、idProperty 設定で ID (「id」) を追加しました。立ち入り禁止。また、それが役立つかどうかを確認するために 10 行のオーバーラップを追加しようとしましたが、それは事態を悪化させるだけのようでした.
これが私の Dojo コードです。
require(["dojo/_base/declare", "dojo/store/JsonRest", "dojox/data/QueryReadStore", "dgrid/OnDemandGrid", "dgrid/Keyboard", "dgrid/Selection", "dojo/domReady!"], function(declare, JsonRest, QueryReadStore, OnDemandGrid, Keyboard, Selection){
var store = new JsonRest({
target: "perlsqllog2.pl",
sortParam: "sort",
idProperty: "id"
});
var grid = new declare([OnDemandGrid, Keyboard, Selection])({
store: store,
query: {aid: "1604" },
queryRowsOverlap: 10,
columns: {
num: "ID",
range: "Debug",
uid: "SAFARI User ID",
ipaddress: "IP Address",
date: "Date"
},
}, "grid");
});