2009-09-15 6 views
3

Спасибо за чтение.jQuery UI: Вложенные сортируемые ошибки

два вопрос:

Я создаю тип проблемно-лист системы, которая будет использовать вложенный сортируемые списки.

Вот некоторые очень простой демо-код:

<script> 
    $(function(){ 

     $('.sortable_test > li').attr('style', 'border:1px solid red; padding:3px; margin:2px;'); 

     $('.sortable_test').sortable({ 
      distance: 5, 
      connectWith: ['.sortable_test'], 
      placeholder: 'ui-state-highlight', 
      forcePlaceholderSize: true 
     }); 
    }) 
</script> 
<ul class='sortable_test'> 

    <li> 
     Item 
     <ul class='sortable_test'> 

      <li> 
       Item 

      </li> 
      <li> 
       Item 
      </li> 
      <li> 
       Item 
      </li> 
      <li> 
       Item 
      </li> 
      <li> 
       Item 
      </li> 
      <li> 
       Item 
      </li> 
      <li> 
       Item 
      </li> 
     </ul> 
    </li> 
    <li> 
     Item 
    </li> 
    <li> 
     Item 
    </li> 
    <li> 
     Item 
    </li> 
    <li> 
     Item 
    </li> 
    <li> 
     Item 
    </li> 
    <li> 
     Item 
    </li> 
</ul> 

Выпуск 1:

Если попытаться перетащить элемент из вложенного подсписка, в этом списке, он прекрасно работает. То же самое, если вы попытаетесь изменить порядок элементов в основном списке.

Однако, если вы хотите перетащить элемент из подписок в основной список или наоборот, он может быть выполнен, но местозаборщик не появится сразу, он попытается сохранить его в том же списке , Вы должны перетащить его повсюду, прежде чем он зарегистрируется в списке, который вы закончили.

В конце концов, кажется, вы понимаете, что хотите попасть в подвыборку или выйти из нее, но это очень хернок-рывка.

Я думаю, что, возможно, это путается в отношении того, какой список имеет приоритет, поскольку вы технически перетаскиваете оба.

Итак, если вы попытаетесь перетащить элемент из главного списка в подсписку, он рассмотрит весь подсписчик как отдельный элемент и попытается переместить его как таковой.

С кем это столкнулось? Есть идеи? Возможно, есть способ указать, какой список имеет приоритет, или сделать его более очевидным для плагина, который вам интересен?

Выпуск 2:

Если взять первый элемент, один большой с подсписком, и попытаться изменить порядок, иногда он будет пытаться зайти в его собственный подсписок, вызовет ошибку, и исчезает , Я могу обойти это, добавив дескриптор и спрятать подсписку при щелчке на ручке (делая его меньшим размером, что устраняет проблему), до начала перетаскивания, но может ли кто-нибудь еще подумать о способе справиться с этим?

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

браузеры:

Это все в Firefox. Похоже, что IE не может иметь дело с вложенными сортировками. Кажется, что нет способа захватить предмет из подсписок.

Спасибо!

ответ

1

Проверить эту ошибку: http://dev.jqueryui.com/ticket/4333

+0

Спасибо! Я также создал отчет об ошибке для этого элемента, так как он имеет пару проблем. – Eli

1

У меня возникли подобные проблемы, и я тоже отправил сообщение об ошибке в JQuery UI и размещена здесь. У меня есть демо, где я использовал несколько дополнительных опций сортировки, и на самом деле это работает нормально в IE, но вы не можете перетаскивать из вложенных списков в FF.

$(".myList").sortable({ connectWith: ".myList", appendTo: 'body', helper: 'clone', items: 'li' }); 
0

Извините, что возродили эту тему. Просто хотел опубликовать для других пользователей, которые спотыкаются по этой теме.

У меня такие же проблемы, как у Eli - с помощью Chrome 8.x.

Eli - для решения проблемы 2 я удалил класс «myList» из всех подписок для перемещения элемента. Я меняю его на «mySubList», а затем вызываю .sortable («refresh») в перетаскиваемом элементе списка. Наконец, я меняю его, как только перетаскивание завершено (и снова вызовите обновление). Это препятствует тому, чтобы родительский элемент был помещен в один из его собственных подписок и вызвал ошибку. Вы не можете вызвать sortable ('refresh') в начале события сортировки (это все равно не сработало для меня), поэтому вам нужно создать свое собственное событие «click», которое выполняет всю эту работу перед сортируемыми событиями начните стрельбу.

У меня есть ручка, поэтому я просто выполняю всю эту работу, когда пользователь нажимает на ручку.

код (не проверял, но вы получите идею, даже если она не работает):

$('.sortable_test').sortable({ 
    distance: 5, 
    connectWith: ['.sortable_test'], 
    placeholder: 'ui-state-highlight', 
    forcePlaceholderSize: true 
}).find('li').click(function() { 
    $(last_selected_li).find('.mySubList').removeClass('mySubList').addClass('myList').end().sortable('refresh'); 
    $(this).find('.myList').removeClass('myList').addClass('mySubList').end().sortable('refresh'); 
}); 
+0

Сладкий! Я нигде не работаю над этим, но мне все еще нравится предлагать решение ... – Eli

Смежные вопросы