сортировка по jquery с использованием поведения связанного списка - PullRequest
1 голос
/ 04 июня 2010

Я подозреваю, что я смотрю на эту проблему не так, как надо.

По сути, у меня есть LinkedList данных на веб-странице (http://en.wikipedia.org/wiki/Linked_list)), которыми я хотел бы манипулировать, используя традиционное поведение Linked List (т.е. просто обновляя ссылку / идентификатор «следующего» объекта) для производительности причины.

Там, где это немного сложно, я в идеале хотел бы использовать сортировку Jquery, чтобы сделать это. Как будто пользователь перетаскивал что-то вверх / вниз, и я мог просто сделать Ajax-вызов на сервер с идентификатором перемещенного объекта и новым родительским идентификатором этого объекта (а затем за кулисами я мог бы выяснить, как восстановить соединение ... может потребоваться больше данных ...).

Но в каждом примере, который я видел, где используется сортировка, они отправляли весь переиндексированный список в базу данных для обновления, что мне кажется ненужным. Со связанным списком, чтобы изменить «индекс» элемента, мне нужно всего лишь сделать 3 обновления, которые в зависимости от размера списка могут привести к значительному снижению производительности. У кого-нибудь есть пример того, что я пытаюсь сделать ... я слишком далеко в левом поле?

1 Ответ

2 голосов
/ 13 июня 2010

Я решил эту проблему, подключив события «start» и «update» в sorttable, чтобы выяснить, какой элемент был перемещен, и затем отправил только этот индекс на сервер.

var items;

$('ul#sortable').sortable({
    start: function() {
        items = $('li.item:not(.ui-sortable-placeholder)', this);
    },
    update: function() {
        $('li.item:not(.ui-sortable-placeholder)', this).each(function(i) {
            var order = items.index(this);
            if (order > i + 1 || order < i) {
                // do ajax request here
                console.log('item %d was moved to %d', order, i);
                return false;
            }
        });
    }
});

Результат был использован для переупорядочения списка, хранящегося на сервере, который в Python так же прост, как

items.insert(index2, items.pop(index1))
...