jquery ui-可排序事件,beforeStop 得到错误的 index() 值

jquery ui-sortable events, beforeStop getting wrong index() values

我们有一个对象列表,使用 jquery ui-sortable ui 为我们的用户实现拖放重新排序。

我想在顶部添加一个不可拖动的行,并防止任何行被拖动到它上面。使用我在此处找到的示例,我在配置上实现了一些事件处理程序,从 beforeStop 开始。

我的问题是,有时我会进入 beforeStop 事件处理程序并且 ui.item.index() 返回错误结果。如果你得到拖动正好, ui.item.index() returns 1,即使它会把它放在0槽中。而不是将 0 中的内容向下推,它似乎在列表中选择一个看似随机的位置(尽管这可能与渲染延迟有关 ui.placeholder)。

我发现帖子说 index() 是 0 或 1,具体取决于您何时向上或向下移动。在这种情况下,我总是在第 0 个项目上使用禁用的句柄向上拖动。所以听起来它应该总是从 0 开始。

不过,我还没有找到任何关于 index() 的文章,只是弄错了。有什么想法吗?

这些是我的处理人员:

beforeStop: function (ev, ui)
{   // beforeStop apparently is not reliable for cancel, so leave some state for stop
    if (ui.item.index() == 0) // sometimes returns the wrong number
        ui.item.badmove = true;
},
stop: function(ev, ui)
{
    if (ui.item.badmove)
        $(this).sortable("cancel");
},

我最终放弃了尝试使 ui-sortable 具有任何不可移动的行,而是在其上方设计了一个单独的列表,使其看起来像可排序但不参与其中。

ui-sortable 太不稳定了。我找不到任何方法从任何事件中获得确定性行为。