أونديماندغريد (دغريد) لن إطلاق طلب (للبيانات الجديدة) على التمرير لأسفل

StackOverflow https://stackoverflow.com//questions/11675976

  •  12-12-2019
  •  | 
  •  

سؤال

حسنا ، لقد كنت قادرا على جعلها تعمل مع داتاغريد ، ولكن لسبب ما ، دغريد يمكن أن تكون مثيرة للإعجاب حقا ، وفي الوقت نفسه ، محبطة حقا (كثير من الناس يوصي به).حتى الآن ، تمكنت من طلب كمية معينة من البيانات (المكالمة الأولى فقط ، لذلك يحدد رأس طلبي إرجاع 25 عنصرا...) ، بمجرد أن أحاول التمرير لأسفل للحصول على المزيد من العناصر (لذلك يجب إرسال طلب إضافي) لا يحدث شيء.

أساسا هذا هو بناء مخزن مع جسونريست:

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

وبعد ذلك ، أنا تمرير هذا المخزن إلى ممتلكات أونديماندغريد.

لقد راجعت هذا المثال الرجل: http://www.speich.net/articles/demos/jsonrest/dojo-demo-dgrid.php لقد راجعت وثائق دغريد (أونديماندليست): https://github.com/SitePen/dgrid/wiki/Core-Components

وأضاف طلب رأس / استجابة رأس (ولكن أعتقد أنها صحيحة): enter image description here enter image description here

رمز جانب الخادم (في بيرل):

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

تحديث:

فعلت اختبار سريع مع جسونستور القديم (دوجوكس / البيانات):

<!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>

لذا ، أعتقد أنه يجب أن يكون المتجر أو الشبكة.

هل كانت مفيدة؟

المحلول 2

نسيت أن أذكر أنني كنت أفعل طلب المجال الخاص مع إطار الراحة (ربما ينبغي أن أقول ذلك ...).

اكتشفت بعد يومين، أن هذا كان سبب مشكلتي (ما زلت لا أعرف السبب أو المصدر).عندما هاجرت الرمز الخاص بي إلى الخادم كل شيء كان يعمل بشكل صحيح.هل قمت باختبار بسيط بسيط على خادم PHP الخاص بي لملء Ondemandegrid ورأيت أنه كان يعمل على محلي بلدي!

plus، لتجاوز المجال المتقاطع، أضفت هذا الرأس في رمز الراحة من جانب الخادم (لمتابعة التطوير على نطاق متقاطع، حتى يكون لدينا بيئة ديف لائقة): giveacodicetagpre.

نصائح أخرى

إشعار على الطلب هناك رأس هتب Range.يشير هذا إلى العناصر المطلوبة.ثم على الاستجابة ، تحتاج إلى أن تكون بما في ذلك Content-Range رأس يصف العناصر التي يتم إرجاعها وإجمالي المتاح.

يتضمن ردك الرأس:

Content-Range: items=0-24/123456

يبدو أن التنسيق يجب أن يكون:

Content-Range: items 0-24/66

من ال وثائق جسونريست:

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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top