0

さて、DataGrid で動作させることができましたが、何らかの理由で、Dgrid は非常に印象的であると同時に、非常にイライラすることがあります (多くの人が推奨しています)。これまでのところ、特定の量のデータをリクエストすることができました (最初の呼び出しのみなので、リクエスト ヘッダーは 25 アイテムを返すように指定されています...)。 ) 何も起こりません。

基本的には、jsonrest を使用したスト​​ア ビルドです。

define([
    "dojo/store/Memory",
    "dojo/store/JsonRest",
    "dojo/store/Cache",
    "dojo/store/Observable"
    ],
function(
    Memory,
    JsonRest,
    Cache,
    Observable
){

    var contentMemoryStore = new Memory();
    var contentJsonRestStore = new JsonRest({target: "http://dev.mpact.tv:30087/rest/contenus/"});

    contentStore = new Cache(contentJsonRestStore, contentMemoryStore);

    return new Observable(contentStore);
});

そして、このストアを OnDemandGrid のプロパティに渡します。

この男の例を確認しました: http://www.speich.net/articles/demos/jsonrest/dojo-demo-dgrid.php dgrid (OnDemandList) のドキュメントを確認しました: https://github.com/SitePen /dgrid/wiki/コア コンポーネント

Requestヘッダー/Responseヘッダーを追加しました(ただし、正しいと思います): ここに画像の説明を入力 ここに画像の説明を入力

サーバー側のコード (perl):

$r->headers_out->set('Content-Range', sprintf("items %d-%d/%d", $start, $start 
+ $num_items - 1, $total));

アップデート:

古い jsonstore (dojox/data) で簡単なテストを行いました。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <title>Statut des canaux générés par Gipsy</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></meta>
        <style type="text/css">
            @import "/dojo/dojo/resources/dojo.css";
            @import "/dojo/dijit/themes/tundra/tundra.css";
            @import "/dojo/dojox/grid/resources/Grid.css";
            @import "/dojo/dojox/grid/resources/tundraGrid.css";
            //.grid {
            //    width: 70em;
            //    height: 40em;
            //}
            .Title { text-align: center }
            html, body { height: 100%; margin: 0px; font-size: 14px; }
        </style>
        <script type="text/javascript" src="/dojo/dojo/dojo.js"  djConfig="isDebug:false, parseOnLoad: false"></script>
        <script type="text/javascript">
            dojo.require("dijit.layout.BorderContainer");
            dojo.require("dijit.layout.ContentPane");
            dojo.require("dojox.grid.TreeGrid");
            dojo.require("dijit.tree.ForestStoreModel");
            dojo.require("dojox.data.JsonRestStore");
            dojo.require("dojo.parser");

            dojo.addOnLoad(function(){

                dojo.parser.parse();

                var layout = [
                    { name: "Dossier", field: "repertoire", width: "auto" },
                    { name: "Fichier", field: "fichier", width: "auto" },
                    { name: "Nom", field: "nom", width: "auto" },
                    { name: "Date", field: "date", width: "auto" }
                ];
                //var jsonStore = new dojo.data.ItemFileReadStore({ data: dataItems });
                //var jsonStore = new dojo.data.ItemFileReadStore({ url: "/cgi-bin/senscity/stingray.json", clearOnClose: true });
                var jsonStore = new dojox.data.JsonRestStore({idAttribute: 'id', target: 'http://dev.mpact.tv:30087/rest/contenus'});
                var treeModel = new dijit.tree.ForestStoreModel({
                    store: jsonStore,
                    query: { type: 'canal' },
                    rootId: 'canalRoot',
                    rootLabel: 'Banane',
                    childrenAttrs: ['children']
                });
                var grid = new dojox.grid.TreeGrid({
                    treeModel: treeModel,
                    structure: layout,
                    selectable: true,
                    defaultOpen: false
                }, 'programmatic_grid');
                grid.startup();
                dojo.connect(window, "onresize", grid, "resize");
            });
        </script>
    </head>
    <body class="tundra">
<!-- -->
        <h1 class="Title" style="margin-bottom: 0.5em;">Statut de la programmation</h1>
        <div dojoType="dijit.layout.BorderContainer" style="width: 100%; height: 100%;">
<!--
            <div dojoType="dijit.layout.ContentPane" region="top" style="height: 20pt; padding: 0px; border: 0px;">
            date de dernière mise à jour, décompte de prochaine mise à jour, bouton de mise à jour, case de désactivation de mise à jour automatique
            </div>
-->
            <div dojoType="dijit.layout.ContentPane" region="center">
<!-- -->
                <div id="programmatic_grid"></div>
<!-- -->
            </div>
<!-- -->
        </div>
    </body>
</html>

だから、それは店かグリッドに違いないと思います。

4

2 に答える 2

5

Request には HTTP Header があることに注意してくださいRange。これは、要求されている項目を示します。Content-Range次に、応答に、返されるアイテムと利用可能な合計を説明するヘッダーを含める必要があります。

レスポンスには次のヘッダーが含まれます。

Content-Range: items=0-24/123456

フォーマットは次のようにする必要があるようです:

Content-Range: items 0-24/66

JsonRest ドキュメントから:

Paging

JsonRest store uses HTTP’s Range header to perform paging. When a request is made for a range of items, JsonRest will include a Range header with an items range unit specifying the range:

Range: items=0-24
On your server, you should look at the Range header in the request to know which items to return. The server should respond with a Content-Range header to indicate how many items are being returned and how many total items exist:

Content-Range: items 0-24/66
于 2012-07-26T19:52:42.303 に答える
3

残りのフレームワークでクロスドメインリクエストを行っていたことを忘れていました(おそらくそれを言うべきです...)。

2日後、これが私の問題の原因であることがわかりました(理由や原因はまだわかりません)。コードをサーバーに移行したとき、すべてが正常に機能していました。私のphpサーバーでonDemandeGridにデータを入力するための簡単なテストを行ったところ、それが私のローカルホストで動作していることがわかりました!

さらに、クロスドメインをバイパスするために、サーバー側の残りのコードにこのヘッダーを追加しました (適切な開発環境ができるまで、クロスドメインで開発を続けるため):

Access-Control-Expose-Headers:Content-Range
于 2012-07-27T17:11:00.163 に答える