LINUX.ORG.RU

dojo — хочется добавить виртуальную подгрузку в грид. как?

 ,


0

1

Объясню по-другому: есть grid в Dojo, табличка, которая содержит результат поиска. Иногда результата поиска может быть много по объёму, поэтому хочется, чтобы результат хранился на сервере, а клиенту в грид, т.е. в браузер — даже при пролистывании по страницам — могло подгружаться при необходимости, чтобы экономилось и время, и трафик. Такое решение есть для версии Dojo == 1.8, или надо велосипедить в сторону воркараунда?

★★★★★

Последнее исправление: Infra_HDC (всего исправлений: 1)

Чисто на память, давно не юзал

Для постраничной менюшки есть вот такая штука:

http://dojotoolkit.org/reference-guide/1.9/dojox/grid/EnhancedGrid.html

в т.ч.

http://dojotoolkit.org/reference-guide/1.9/dojox/grid/EnhancedGrid/plugins/Pa...

Для того, чтобы с сервера листать постранично, у DataGrid есть опция store. Store — это интерфейс, который можно заимплементить полностью вручную или взять один из готовых и похакать.

Готового примера не нагуглил, для старого dojo есть вот такой пример, можно будет сделать что-то идеалогически похоже для нового апи. (Пример использует http://livedocs.dojotoolkit.org/dojox/data/QueryReadStore на клиенте и python+cherrypy на сервере)

С другой стороны, вот вот пример интерфейса пагинации из документации: http://dojotoolkit.org/reference-guide/1.9/quickstart/data/usingdatastores/pa... (ну и вообще см. http://dojotoolkit.org/reference-guide/1.9/quickstart/data/usingdatastores.html), но там используется ItemFileReadStore, вместо него надо нечто своё на эту же тему

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

У меня есть скрипт php, который генерирует контент для store в формате JSON, причём генерирует сразу все результаты поиска на вход в js, т.е. в dojo, и вот не могу понять, как по-другому ведь надо делать тогда, чтобы всё сразу клиенту не отдавал, да?

Infra_HDC ★★★★★
() автор топика
Ответ на: комментарий от stevejobs

Продолжение предыдущей мысли: гриду нужно знать общее количество страниц, поэтому JSON нужен ему весь целиком, но т.к. это js, то этот JSON должен подгрузиться клиенту целиком. Непонятно, как избавиться от этой подгрузки, и грузить только то, что внутри текущей страницы и подгружать страницу, т.е. кусок JSON-а только при переходе на неё.

Infra_HDC ★★★★★
() автор топика
Последнее исправление: Infra_HDC (всего исправлений: 1)
Ответ на: комментарий от Infra_HDC

Могу сказать, по своему опыту работы с django-tastypie, что там результаты отдаются порциями (по умолчанию - 20 объектов) и не смотря на это проблем нет, поскольку поддерживается пагинация устанавливаемая с помощью атрибутов урла limit и offset.

С другой стороны (со стороны клиента, хех!), этого как бы мало, поскольку сам по себе JsonRest (dojo/store/JsonRest) пагинацию не поддерживает никак.

Мне пришлось обновлять значение атрибута запроса (query) объекта JsonRest по событию перелистывания таблицы. Кроме того, прежде чем подсовывать таблице JsonRest объект, его пришлось завернуть в объект Observable, что бы добиться эффекта автоматического обновления таблицы при обновлении источника данных.

k0valenk0_igor ★★★
()
Ответ на: комментарий от Infra_HDC

см тот пример что для питона. Там он отдает с сервера только данные с индексами со start по start+count. Результат, куски от которого отдаешь клиенту, можно сохранить где-нибудь на сервере в кэше. В качестве store использовать QueryReadStore или что-то подобное, примеры есть.

stevejobs ★★★★☆
()
Ответ на: комментарий от Infra_HDC

гриду нужно знать общее количество страниц

отдавать отдельным запросом с сервера (на основании json, который лежит в кэше)

stevejobs ★★★★☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.