Сортируемый пользовательский интерфейс JQuery: восстановление позиции на основе некоторых условий - PullRequest
11 голосов
/ 18 апреля 2010

Я звоню sortable.stop(), чтобы сделать вызов ajax для сохранения некоторых данных после операции перетаскивания.

Когда вызов ajax возвращает ошибку (ошибка логики приложения или проблема с сетью), я хочу переместить перетаскиваемый элемент в исходное / начальное положение, как я могу этого достичь?

Сценарий должен быть

  1. пользователь перетаскивает от A до B
  2. вызывается событие sortable.stop(), оно запускает вызов ajax
  3. вызов ajax возвращает ошибку
  4. внутри события stop() мы получаем ошибку ajax
  5. переместить А в исходное положение
  6. пользователь снова переместится в B
  7. все в порядке
  8. A остается на своей новой позиции в B

Шаги 6-8 показаны, чтобы уточнить, может ли быть выполнено последовательное перетаскивание, и предыдущая ошибка должна быть забыта.

Ответы [ 3 ]

23 голосов
/ 18 апреля 2010

Посмотрите на .sortable('cancel'); как то так:

var list = $('#some-list')
list.sortable(
{
    // Some options.
    stop: function()
    {
        $.post('some-url', someData, function()
        {
            if (somethingWentWrong)
            {
                list.sortable('cancel');
            }
        });
    }
});
8 голосов
/ 28 июня 2011

Благодаря Дафи - у меня это работает:

$('#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');, но я думаю, что лучше отменить исходные и целевые сортируемые списки. Таким образом, элемент списка немедленно возвращается. Другие сортируемые варианты здесь.

1 голос
/ 24 октября 2017

Спасибо, liveat60fps, это второе утверждение из двух, которые вам нужны.

$('#some-list').sortable({

      // other options here,
  receive: function(event, ui) {

    // ajax or function here
    if(somethingWentWrong) {
       $(this).sortable('cancel');
       $(ui.sender).sortable('cancel');
    }    
  }    
});

Таким образом, при определенных условиях вы можете вернуться в исходное состояние.

...