OnDemandGrid (Dgrid) no activará una solicitud (para datos nuevos) al desplazarse hacia abajo

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

  •  12-12-2019
  •  | 
  •  

Pregunta

Muy bien, he podido hacerlo funcionar con DataGrid, pero por alguna razón, Dgrid puede ser realmente impresionante y, al mismo tiempo, realmente frustrante (mucha gente lo recomienda).Hasta ahora, he podido solicitar una cierta cantidad de datos (solo la primera llamada, por lo que el encabezado de mi solicitud especifica devolver 25 elementos...), una vez que intento desplazarme hacia abajo para tener más elementos (por lo que se debe enviar una solicitud adicional ) no pasa nada.

Básicamente esa es la tienda construida con 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);
});

Y luego, paso esta tienda a la propiedad de OnDemandGrid.

He comprobado el ejemplo de este chico: http://www.speich.net/articles/demos/jsonrest/dojo-demo-dgrid.phpHe comprobado la documentación de dgrid (OnDemandList): https://github.com/SitePen/dgrid/wiki/Core-Components

Se agregó encabezado de solicitud/encabezado de respuesta (pero creo que son correctos): enter image description here enter image description here

Código del lado del servidor (en perl):

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

Actualizar:

Hice una prueba rápida con el antiguo 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>

Entonces, supongo que tiene que ser la tienda o la red.

¿Fue útil?

Solución 2

Me olvidé de mencionar que estaba haciendo una solicitud de dominio cruzado con mi marco de descanso (tal vez debería decirlo ...).

Descubierto después de 2 días, que esta fue la causa de mi problema (todavía no sé la razón o la fuente).Cuando migré mi código al servidor, todo estaba funcionando correctamente.¿Una pequeña prueba simple en mi servidor PHP para rellenar un OnDemandegrid y vio que estaba trabajando en mi localhost!

plus, para evitar el dominio cruzado, agregué este encabezado en mi código de resto del lado del servidor (para continuar desarrollándose en un dominio cruzado, hasta que tengamos un entorno de desarrollo decente):

Access-Control-Expose-Headers:Content-Range

Otros consejos

Aviso en la solicitud que hay un encabezado HTTP Range.Esto indica qué artículos se están solicitando.Luego, en la respuesta, debes incluir una Content-Range encabezado que describe qué artículos se devuelven y el total disponible.

Su respuesta incluye el encabezado:

Content-Range: items=0-24/123456

Parece que el formato debe ser:

Content-Range: items 0-24/66

Desde el Documentación 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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top