1

我试图让 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");

});
4

1 回答 1

0

事实证明,我的 JSON 数据中有一个错字。我让它在 JSON 中输出“id:”而不是“id”,这阻止了网格将其视为唯一 id。显然,dgrid 确实需要一个唯一的 ID 才能工作,而且现在提供了一个唯一的 ID,它似乎工作得很好。

于 2012-11-06T04:15:00.253 回答