jQuery Draggable + Sortable - Как изменить сортируемые предметы? - PullRequest
0 голосов
/ 22 августа 2011

У меня есть сортируемый список видео, инициализированный с опцией:

items: '.videoBox:not(.isFirst, .isLast)',

Первое и последнее видео не сортируются и не перетаскиваются ни в коем случае - это прекрасно!

Это связано с другим перетаскиваемым списком видео с помощью опции connectToSortable. Некоторые из видео, которые я хочу иметь возможность перетаскивать между видео isLast и isFirst (их много), поэтому для тех, кому нужны эти элементы, можно снова отсортировать, поэтому я использую:

start: function(event, ui) {
  if (// my test //)
  {
      $('#timeline').sortable('option', 'items', '.videoBox');
  }
},

Это позволяет мне перетаскивать предметы, которые ранее не сортировались - отлично!

Теперь я хочу вернуть сортируемую исходную настройку после завершения перетаскивания, поэтому я поместил это в перетаскиваемый init:

stop: function() {
  if (// my test //)
  {
    $('#timeline').sortable('option', 'items', '.videoBox:not(.isFirst, .isLast)');
    $('#timeline').sortable('refresh');
    $('#timeline .videoBox.isLast, #timeline .videoBox.isFirst').draggable('destroy');
  }
},

Это прекрасно работает, если перетаскиваемый объект не попадает в #timeline. Однако, если он сброшен в #timeline, то этот обратный вызов, похоже, не вызывается (?). Я добавил точно такой же код в сортируемые события: stop, update и deactivate, и хотя я вижу, что эти обратные вызовы запускаются, видео isFirst и isLast по-прежнему можно перетаскивать.

Однако они не сортируются - поэтому я думаю, что проблема заключается в бите .draggable('destroy') ... Есть идеи / предложения?

Ура, Том

1 Ответ

0 голосов
/ 23 августа 2011

Мне не удалось устранить или даже определить причину проблемы, описанной выше.Однако я нашел обходной путь, который кажется достаточно надежным.

В обратном вызове stop для sortable init:

stop: function() {
    $('#timeline').sortable('option', 'items', '.videoBox:not(.isFirst, .isLast)');
    opts = $('#timeline').sortable('option');
    $('#timeline').sortable('destroy');
    $('#timeline').sortable(opts);
}

В первой строке задается опция элементов, как яделаю раньше.Затем я сохраняю опции sortable init в переменной, уничтожаю поведение sortable и заново инициализирую его правильными опциями.Это делает то, что я хочу сейчас - я уничтожаю перетаскиваемые элементы isFirst и isLast).Я оставил обратный вызов stop точно таким же, как и выше, в обратном вызове draggable, который необходим для случая, когда перетаскивание не заканчивается поверх сортируемого.найти лучший способ.Хотелось бы знать, есть ли у кого-нибудь еще какие-либо предложения.

Том

...