我试图让 dgrid 与 JsonRest 一起工作。我已经实现了一个基于 Perl 的服务器端组件,它发回 JSON 数据。响应数据如下所示:
{"id:": 00016, "num": 00016, "range": "15 - 63 (49)", "uid": "0", "ipaddress": "xx.xx.xx.xx", "hostname": "", "referer": "http:\/\/www.facebook.com\/l.php?u=http%3A%2F%2Fasisaid.com%2Fjournal%2Farticle%2F1604.html&h=8e20f", "useragent": "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8", "date":1281010282000}
这些散列“行”中的每一个都在一个数组中。当 dgrid 加载时,它会在没有 Range 标头的情况下查询服务器组件,并且服务器组件会返回默认的数据范围。然后,dgrid 再次使用“Range: items=0-24”查询。作为响应,服务器以列出的格式提供条目 1-25,并带有响应头“内容范围:项目 0-24/470”。
当 dgrid 请求接下来的 40 个项目时,问题就出现了。它请求“范围:items=23-63”并且服务器成功地满足了请求(我可以使用 WebKit 开发人员工具看到它,它显示数据已被检索)。但是,当我滚动浏览 dgrid 本身时,我看到第 1-25 行,然后它跳到第 40 行。如果我继续滚动,它会继续加载所有 470 个条目,但网格开始四处移动,行变得显着乱序(例如,网格从第 8 行开始,第 1 行出现在第 75 行之后)。
我认为这可能是因为我的 JSON 数据没有包含绝对唯一的 ID,所以我添加了一个带有 idProperty 设置的(“id”)。不去。我还尝试添加 10 行重叠,看看是否有帮助,但这似乎只会让事情变得更糟。
这是我的 Dojo 代码:
require(["dojo/_base/declare", "dojo/store/JsonRest", "dojox/data/QueryReadStore", "dgrid/OnDemandGrid", "dgrid/Keyboard", "dgrid/Selection", "dojo/domReady!"], function(declare, JsonRest, QueryReadStore, OnDemandGrid, Keyboard, Selection){
var store = new JsonRest({
target: "perlsqllog2.pl",
sortParam: "sort",
idProperty: "id"
});
var grid = new declare([OnDemandGrid, Keyboard, Selection])({
store: store,
query: {aid: "1604" },
queryRowsOverlap: 10,
columns: {
num: "ID",
range: "Debug",
uid: "SAFARI User ID",
ipaddress: "IP Address",
date: "Date"
},
}, "grid");
});