Магазин Dojo, Dgrid и ошибочные записи

Я пытаюсь заставить 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 в указанном формате и с заголовком ответа "Content-Range: элементы 0-24/470".

Проблема возникает, когда dgrid запрашивает следующие 40 элементов. Он запрашивает "Range: items=23-63", и сервер успешно выполняет запрос (я вижу это с помощью инструментов разработчика WebKit, которые показывают, что данные были получены). Однако, когда я прокручиваю саму dgrid, я вижу строки 1-25, а затем он переходит к строке 40. Если я продолжаю прокручивать, он продолжает работать в направлении загрузки всех 470 записей, но сетка начинает смещаться вокруг, и строки становятся резко не в порядке (например, сетка начинается со строки 8, а строка 1 отображается после строки 75).

Я подумал, что это возможно, потому что мои данные JSON не содержат однозначно уникальный идентификатор, поэтому я добавил один ("id") с настройкой idProperty. Нет идти. Я также попытался добавить 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");

});

1 ответ

Решение

Как оказалось, в моих данных JSON была опечатка. Я вывел "id:" в JSON, а не "id", и сетка не видела в нем уникальный идентификатор. По-видимому, для работы dgrid требуется уникальный идентификатор, и теперь, похоже, он работает успешно, когда предоставляется уникальный идентификатор.

Другие вопросы по тегам