Сортируемый jQuery сериализуют два столбца в одном вызове базы данных? - PullRequest
0 голосов
/ 11 августа 2009

Привет всем. Краткий обзор того, что я пытаюсь сделать. У меня есть два столбца данных. Каждый столбец имеет произвольное количество однородных элементов. В событии сортируемого обновления jQuery я хочу сериализовать расположение всех элементов в их респектабельной колонке. Каждый элемент в столбцах имеет идентификатор вида item_{id}. В событии обновления я буду сериализовать элементы в обоих столбцах. Я хотел знать, существует ли эффективный способ сериализации порядков столбцов col1 и col2 и объединения их в один вызов базы данных. Из коробки метод sort («serialize») возвращает форматированную строку, например:

item[]=88&item[]=1&item[]=2&item[]=90

Итак, в событии обновления для столбца 1 у меня есть:

$("#col1").sortable({
    handle: '.item h2',
    connectWith: '#col2',
    update: function(event, ui) { Update(event, ui); }
}).disableSelection();

И для столбца 2:

$("#col2").sortable({
    handle: '.item h2',
    connectWith: '#col1',
    update: function(event, ui) { Update(event, ui); }
}).disableSelection();

И событие обновления:

function Update(event, ui) {
    var col1Order = $("#col1").sortable("serialize");  // Returns item[]=88&item[]=1&item[]=2&item[]=90
    var col2Order = $("#col2").sortable("serialize");  // Returns item[]=23&item[]=10&item[]=65
}

Существует ли эффективный способ объединить упорядочение столбца 1 и упорядочения столбца 2 в один вызов базы данных (при этом обновленная позиция будет сохранена в базе данных)?

Если я объединю два результата вместе, это приведет к строке вида:

item[]=88&item[]=1&item[]=2&item[]=90&item[]=23&item[]=10&item[]=65

С помощью этой формы вы не можете различить, какой элемент пришел из какого столбца. Я обдумывал разные подходы. Один из подходов - отформатировать строку запроса так, чтобы она выглядела как ?col1=88_1_2_90&col2=23_10_65, а затем на стороне сервера разделить значение col1, 88_1_2_90, на '_', что даст мне массив значений (88 в позиции 0, 1 в положение 1 и т. д.) и разделить значение col2 с помощью того же метода, но я подумал, что может быть более элегантный способ сделать это.

Моя главная цель - избежать двух отдельных вызовов базы данных (один для столбца 1 и другой для столбца 2). Я мог бы сериализовать col1 и сделать вызов в базу данных, обновляя позиции элементов в col1, а затем сериализовать col2 и сделать еще один вызов в базу данных, обновив позиции элементов в col2, но это то, чего я пытался избежать.

Я открыт для любых предложений. Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 05 января 2012

Вы можете решить эту проблему, используя:

jQuery('.column').sortable('serialize', {key: 'widgets[0][]'});
0 голосов
/ 09 ноября 2009

А как насчет использования вложенных массивов? Вы должны получить что-то вроде этого:

item[0][]=88&item[0][]=1&item[0][]=2&item[0][]=90&item[1][]=23&item[1][]=10&item[1][]=65

Вы можете легко использовать функции, связанные с массивами, чтобы сгладить их в один массив, если необходимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...