我有这个问题
我正在使用DataGrid + dojo.store.JsonRest作为商店。我想只加载那些当前需要的物品。因此,当我有10000个项目时,只有~100初始加载,其余的是在用户滚动网格时下载。
我创建了两个文件
前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; ?>
]
答案 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直接工作正常。