JQuery UI sortable: восстановление позиции на основе некоторого условия
Я вызываю sortable.stop()
, чтобы сделать ajax-вызов для хранения некоторых данных после операции перетаскивания.
Когда вызов ajax возвращает ошибку (ошибка логики приложения или проблема с сетью), я хочу переместить перемещенный элемент в исходную/начальную позицию, как я могу его достичь?
Сценарий должен быть
- пользователь перетаскивает A в B
- вызывается событие
sortable.stop()
, оно вызывает вызов ajax
- вызов ajax возвращает ошибку
- внутри события
stop()
мы получаем ошибку ajax
- переместить A в исходное положение
- пользователь снова перемещает A в B
- все в порядке
- A остается в своем новом положении в B
Показаны шаги 6-8, чтобы прояснить последовательное перетаскивание, и предыдущая ошибка должна быть забыта.
Ответы
Ответ 1
Посмотрите .sortable('cancel')
; что-то вроде этого:
var list = $('#some-list')
list.sortable(
{
// Some options.
stop: function()
{
$.post('some-url', someData, function()
{
if (somethingWentWrong)
{
list.sortable('cancel');
}
});
}
});
Ответ 2
Благодаря dafi - это работает для меня:
$('#some-list').sortable({
// other options here,
receive: function(event, ui) {
// ajax or function here
if(somethingWentWrong) {
$(this).sortable('cancel');
$(ui.sender).sortable('cancel');
}
}
});
Я не уверен, что вам нужно $(this).sortable('cancel');
, но я считаю, что лучше всего отменить список сортировки и назначения. Таким образом, элемент списка немедленно возвращается. Другие Сортируемые options здесь.
Ответ 3
Спасибо, liveat60fps, его второе утверждение из двух, которое вам только нужно.
$('#some-list').sortable({
// other options here,
receive: function(event, ui) {
// ajax or function here
if(somethingWentWrong) {
$(this).sortable('cancel');
$(ui.sender).sortable('cancel');
}
}
});
Таким образом, при определенном условии вы можете вернуться в состояние orignal.