1

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");

});
4

1 に答える 1

0

結局のところ、JSON データにタイプミスがありました。「id」ではなく「id:」を JSON に出力したため、グリッドがそれを一意の ID として認識できませんでした。どうやら、dgrid が機能するには一意の ID が必要であり、一意の ID が提供されているため、問題なく動作しているようです。

于 2012-11-06T04:15:00.253 に答える