DOJO:DataGrid增量加载不起作用

时间:2012-02-03 15:03:05

标签: javascript ajax datagrid dojo

我有这个问题

我正在使用DataGrid + dojo.store.JsonRest作为商店。我想只加载那些当前需要的物品。因此,当我有10000个项目时,只有~100初始加载,其余的是在用户滚动网格时下载。

我创建了两个文件

  1. datagridtest.php包含datagrid
  2. jsonsource.php实现测试数据源(不应返回499条记录)
  3. 前25项显示正常。但是,当我尝试向下滚动datagrid时,dos不会请求新项目 - 使用FireBug进行检查。

    请帮忙。我做错了什么。

    以下是我的代码:

    datagridtest.php:

    <html><head>
        <link rel="stylesheet" type="text/css" href="../libs/dojo/dijit/themes/claro/claro.css" />
        <link rel="stylesheet" type="text/css" href="../libs/dojo/dijit/themes/style.css" />
        <script type="text/javascript">     djConfig = {parseOnLoad: true,} </script>
        <script type="text/javascript" src="../libs/dojo/dojo/dojo.js"></script>
    </head>
    <body class="claro">
    
    <style type="text/css">
        @import "../libs/dojo/dojox/grid/resources/Grid.csss";
        @import "../libs/dojo/dojo/resources/dojo.csss";
        @import "../libs/dojo/dojox/grid/resources/claroGrid.css";
    </style>
    
    <script type="text/javascript">
    
        dojo.require("dijit.dijit");
        dojo.require("dojox.grid.DataGrid");
        dojo.require("dojo.data.ObjectStore");  
        dojo.require("dojo.store.JsonRest");
    
        var store, grid;
        dojo.ready(function() {  
    
            store = new dojo.store.JsonRest({
                target:"jsonsource.php",
                idProperty: "id"
            });     
    
            grid = new dojox.grid.DataGrid({
                store: dataStore = dojo.data.ObjectStore({ objectStore: store }),           
                structure: [
                {
                    cells: [
                        [
                            { name: "Id", field: "id"},
                            { name: "Name", field: "name" },
                            { name: "E-Mail", field: "email", width: "200px"},
                        ]
                    ]
                }
                ]
            }, "gridDiv");
    
            grid.startup();     
        } );
    
    </script>
    
    <div id="gridDiv"></div>
    </body></html>
    

    jsonsource.php:

    <?php
    
    $RangeTemp = explode("=", $_SERVER['HTTP_RANGE']);
    $Range = explode("-", $RangeTemp[1]);
    if ($RangeTemp[1] != "") {
        $RangeFrom = $Range[0];
        $RangeTo = $Range[1];
    }
    
    if ($RangeFrom > 500) { print "[ ]"; die(); }
    
    ?>
    [
        <?php for($i=$RangeFrom; $i<=$RangeTo; $i++): ?>
            {
                "id": <?=$i; ?>,
                "name": "Jack <?=$i; ?>",
                "email": "jack@jacekplacek.pl"
            },
        <?php endfor; ?>
    ]
    

2 个答案:

答案 0 :(得分:2)

我相信您需要设置“Content-Range”标题,让Dojo知道您返回了哪些记录,以及总共有多少记录。

设置标题如下:

header("Content-Range: items 0-24/10000");

在你的情况下,你会写这个:

header("Content-Range: items $RangeFrom-$RangeTo/$total");

希望有所帮助。

答案 1 :(得分:0)

似乎问题出在ObjectStore + JsonRest解决方案上。如果我使用 dojox.data.JsonRestStore直接工作正常。