JQuery UI Sortable: отменять изменения, если обратный вызов обновления вызывает отказ AJAX?
Я использую сортируемый виджет, чтобы переупорядочить список элементов. После того, как элемент перетаскивается в новое место, я запускаю сообщение формы AJAX на сервер, чтобы сохранить новый порядок. Как я могу отменить сортировку (например, вернуть элемент перетаскивания в исходное положение в списке), если я получаю сообщение об ошибке с сервера?
В принципе, я хочу, чтобы повторный заказ "вставил", если сервер подтверждает, что изменения были сохранены.
Ответы
Ответ 1
Я уверен, что сортировка не имеет функции отмены-последнего-падения, но это отличная идея!
Тем временем, я думаю, что лучше всего написать какой-то start
, который хранит заказ, а затем при отказе вызывать функцию возврата. То есть что-то вроде этого:
$("list-container").sortable({
start: function () {
/* stash current order of sorted elements in an array */
},
update: function () {
/* ajax call; on failure, re-order based on the stashed order */
}
});
Хотелось бы узнать, есть ли у других лучший ответ.
Ответ 2
Попробуйте следующее:
$(this).sortable('cancel');
Ответ 3
Я только что столкнулся с этой же проблемой, и для полного ответа я хотел поделиться своим решением этой проблемы:
$('.list').sortable({
items:'.list:not(.loading)',
start: function(event,ui) {
var element = $(ui.item[0]);
element.data('lastParent', element.parent());
},
update: function(event,ui) {
var element = $(ui.item[0]);
if (element.hasClass('loading')) return;
element.addClass('loading');
$.ajax({
url:'/ajax',
context:element,
complete:function(xhr,status) {
$(this).removeClass('loading');
if (xhr.status != 200) {
$($(this).data('lastParent')).append(this);
}
},
});
}
});
Вам нужно будет изменить его в соответствии с вашей кодовой базой, но это полностью многопоточное безопасное решение, которое очень хорошо работает для меня.