jquery ui-сортируемые события, beforeStop получает неправильные значения index () - PullRequest
0 голосов
/ 02 мая 2019

У нас есть список объектов, использующих jquery ui-sortable для пользовательского интерфейса, для реализации порядка перетаскивания для наших пользователей.

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

Моя проблема в том, что иногда я попадаю в обработчик события beforeStop, и ui.item.index () возвращает неправильный результат. Если вы перетащите вправо , ui.item.index () вернет 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");
},

1 Ответ

0 голосов
/ 03 мая 2019

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...