2011-08-22 108 views
0

我与选项初始化影片排序列表:jQuery Draggable + Sortable - 如何更改可排序项目?

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

第一个和最后的影片都没有排序,也不是他们以任何方式拖动 - 这是伟大的!

使用connectToSortable选项连接到另一个可拖动的视频列表。一些影片,我希望能够给isLastisFirst影片(其中有很多),所以对于那些我需要这些物品再次可排序的,所以我用之间拖动:

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'); 
    } 
}, 

这个伟大的工程IF可拖拽没有投进#timeline时间。但是,如果它被放入#timeline那么这个回调似乎不被称为(?)。我已将相同的代码添加到可排序的事件中:stop,updatedeactivate,虽然我可以看到这些回调被触发,但isFirstisLast视频仍可拖动。

但它们不可排序 - 所以我认为问题在于.draggable('destroy')位......任何想法/建议?

干杯, 汤姆

回答

0

我还没有能够修复,甚至找出上述问题的原因。然而,我发现了一个似乎相当健壮的解决方法。

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行为并使用正确的选项重新初始化它。这就是我现在想要的 - 我销毁了isFirstisLast项目上的可拖动项)。我已经完全按照draggable回拨中的stop回拨离开了回拨,这是拖拽不能结束排序时的情况。

似乎有点大锤的做法,但努力寻找更好的方法。有兴趣知道是否有人有任何其他建议。

Tom

相关问题