У меня есть список перетаскиваемых объектов, связанных со списком сортируемых. Перетаскивание работает отлично, как и сортировка. Дело в том, что перед сортировкой списка мне нужно создать запись в БД (используя rails). Поэтому я использую $ .post, который работает нормально, но мне нужно изменить идентификатор вставленного элемента. Я делаю это, меняя идентификатор вставленного элемента с помощью обратного вызова $ .post. Работает нормально, но это происходит ПОСЛЕ рода. И если вам интересно, почему я не использовал перетаскиваемый обратный вызов stop, это потому, что он делает то же самое. Вот сокращенный код (удалены ненужные вещи из БД):
$("#operations_container").sortable({items:'.process_small', axis:'y', update: function(ev,ui) {
if (ui.item.attr('id').match("workcenter"))
{
$.post('/operations', 'fancyrailspoststuffignore', function(data) {
$("#operations_container > #workcenter_" + workcenterid).attr("id", "operation_" + data.operation.id);
}, "json");
}
$.post('/jobs/sort/<%= @job.id %>', 'morefancyschamncyrailsjunk);
}});
Сортируемый контейнер прост:
<div id="operations_container" class="in_grid">
</div>
Так что мне кажется, что все обратные вызовы называются после сортировки. Это правда? Как обойти это, если вам нужно обновить DOM перед сортировкой?
ОБНОВЛЕНИЕ: В случае, если они пропущены в комментариях, вот изображение и примеры файлов, иллюстрирующих проблему.
Изображение: http://dl.getdropbox.com/u/1826667/sortable.png
Примеры файлов: http://dl.getdropbox.com/u/1826667/jquery_callback_order.zip
Таким образом, кажется, что обратные вызовы всегда заканчиваются в конце любых других событий независимо от того, где они вызываются (обратный вызов @ .post до того, как сортируемое обновление по-прежнему вызывается последним и т. Д.) Я не думаю, что это сбой в JQuery (хотя я нахожу это странным); Я пытаюсь сделать несколько постов (которые необходимы, поскольку они являются взаимозависимыми; создать запись, а затем отсортировать) за один раз, что, возможно, не является подходящим способом сделать это. Я попробую обойти это в бэкэнде (у меня что-то почти работает), поэтому я считаю это закрытым. Спасибо всем, кто помог с проблемой. ТАК правила.
MEGAIMPORTANTUPDATE: Это работает! Шон понял (см. Ответ), и я все еще немного легкомыслен. Это было несколько дней на эту вещь. Еще раз спасибо всем и особенно Шону. Вы качаетесь.