Магазин 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 требуется уникальный идентификатор, и теперь, похоже, он работает успешно, когда предоставляется уникальный идентификатор.