DOJO:DataGrid 增量加载不起作用

Posted

技术标签:

【中文标题】DOJO:DataGrid 增量加载不起作用【英文标题】:DOJO: DataGrid incremental loading doesn't work 【发布时间】:2012-02-26 04:38:51 【问题描述】:

我有这个问题

我使用 DataGrid + dojo.store.JsonRest 作为存储。我只想加载那些当前需要的项目。所以当我只有 10000 个项目时,初始加载 100 个,其余的在用户滚动网格时下载。

我创建了两个文件

    datagridtest.php 包含数据网格 jsonsource.php 实现测试数据源(应该返回不超过 499 条记录)

前 25 个项目显示正常。但是当我尝试向下滚动数据网格时不会请求新项目 - 使用 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; ?>
]

【问题讨论】:

【参考方案1】:

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

这样设置标题:

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

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

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

希望对您有所帮助。

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于DOJO:DataGrid 增量加载不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Dojo EnhancedGrid 嵌套排序不起作用

添加其他功能时小部件不起作用

Dojo onCellDblClick 功能不起作用

Dojo 功能在 IE8 上不起作用

Dojo 插件在 Struts 2 中不起作用

dojo - 模板中的单击事件不起作用