Pagination + sortable list
Здравствуйте.
Как правильно реализовать сортировку списка перетаскиванием элементов с учетом того, что список выводится постранично? Элементам списка собираюсь добавить свойство int _index, по которому сортировка и будет осуществляться. С сортировкой данных в пределах одной страницы никаких проблем нет, но как реализовать её с учетом пагинации - не знаю. Пока что думаю отслеживать позицию перетаскиваемого элемента и подгружать следующую/предыдущую страницу списка и скрывать "старые" страницы, чтобы не насиловать клиент. Реализация кажется довольно геморойной. Есть ли более простые решения? (отказ от пагинации - не вариант, т.к. элементом может быть ну очень много). |
А как понять "с учетом постранчиной навигации"? Перетаскивание в пределах то какой либо страницы, и без всего списка, в пределах его всего отсортировать не получится. Постраничный вывод уже подразумевает сортировку по какому либо параметру.
|
Цитата:
|
Цитата:
|
Nexus,
:write: согласен с laimas, либо задача невыполнима, либо вы что-то не договариваите. |
laimas, в шапке в 4-м абзаце описал предполагаемый способ решения задачи.
Если подгружать недостающие элементы на пути drag'а, то задача вполне себе решаемая. |
рони, что невыполнимого я описал в 4-м абзаце в шапке?)
|
Nexus,
мне сложно представить перетаскивание элемента со страницы на страницу.(не хочу вам мешать) |
рони, вы мне не мешаете.
Если бы я желал, чтобы мне не "мешали", то не создал бы эту тему) Попытаюсь визуализировать описанное в шапке. Есть условный список: List Page-1 Elem-0 Elem-1 Elem-2 Elem-3 Elem-4 Page-2 Elem-5 Elem-6 Elem-7 Elem-8 Elem-9Находясь на странице 2 я желаю "элемент 8" перенести на позицию "элемента 2". Элементов со страницы 1 я не вижу, т.к. текущая страницы = 2. Как только я передвину "элемент 8" на позицию "элемента 7", в начало текущего документа асинхронно подгрузятся элементы со страницы 1. После завершения асинхронного запроса я смогу передвинуть "элемент 8" на вожделенное место "элемента 2". Вроде бы вполне реализуемая задумка. |
Цитата:
List Page-1 Elem-0 Elem-1 Elem-2 Elem-3 Elem-4 Page-2 Elem-5 Elem-6 Elem-7 Elem-8 Elem-9 станет List Page-1 Elem-0 Elem-1 Elem-2 Elem-3 Elem-4 Page-2 Elem-5 Elem-6 Elem-8 Elem-7 Elem-9 Что при этом изменится, что заставит подгрузится элементы с первой страницы? Я еще понимаю, если тянуть вверх и выйти за пределы списка, что инициалиузирует запрос и загрузит первую страницу и в ней опустить элемент с индексом 8, перед индексом 2, это будет инициализацией обновления в базе. Но чтобы 8 на позицию 7 и показалось нечто с первой страницы ..., этого я не понимаю. |
Цитата:
Какую страницу подгрузить станет понятно сравнив позиции текущего и вытесненного элемента. |
Цитата:
|
Цитата:
Да, элемент остался на той же странице, однако пользователь вполне может потянуть его дальше в начало документа, так и не сделать этого. Если потянул, то я покажу ему предыдущую страницу, нет - скрою её. |
Цитата:
Я редактировал, пост, добавил, если не читали: Я еще понимаю, если тянуть вверх и выйти за пределы списка, что инициалиузирует запрос и загрузит первую страницу и в ней опустить элемент с индексом 8, перед индексом 2, это будет инициализацией обновления в базе. Но чтобы 8 на позицию 7 и показалось нечто с первой страницы ..., этого я не понимаю. Это другое дело, но опять таки, если это перемещение в небольших пределах, но если большой список ... врагу не пожелаешь такой сортировки. :) |
Nexus,
такая задача не редко возникает в админках. Мне как-то пришлось решать такой вопрос, и ждать пока "перемотает", это утомительно, да и заказчика волновал всегда вопрос цены - не надо наворотов, чем дешевле тем лучше. Это без наворотов и использую зачастую. Все элементы навигатора (страницы) доступны из панели внизу. Ее состояние по умолчанию - одна строка кнопок страниц, в которой текущая страница. При наведении мыши она выезжает на всю высоту. В списке щелчком выбирается (подсвечивается) перемещаемый элемент, затем на панель навигатора, он раскрывается, подводим мышь под нужную страницу, раскрывается список с кнопками элементов в нем, выбираем в нем позицию. Эти две позиции отправляются на сервер. |
Цитата:
Цитата:
Цитата:
|
Цитата:
|
laimas, перемещение на новую позицию нескольких элементов единовременно, вероятно, самая непопулярная операция.
Но спасибо за подсказку ) |
Цитата:
|
Цитата:
|
Цитата:
Бывают необходимости переносов не только в контексте сортировки, но и переносов узлов дерева в дереве, что как раз удобно делать посредством drag & drop. |
Часовой пояс GMT +3, время: 05:03. |