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.