Как предотвратить сортировку элемента (исправить положение) в Kendo Sortable / Integration - ListView?

var dataSource = new kendo.data.DataSource({
        data: anArray
    })

var listView = $("#listView").kendoListView({
    name: "listView",
    tagname: "div",
    dataSource: dataSource,
    template: kendo.template($("#listview-template").html()),
});

listView.kendoSortable({
        filter: ">div.myclass",
        cursor: "move",
        placeholder: function (element) {
            return element.clone().addClass("placeholder").text("position here")
        },
        hint: function (element) {
            return element.clone().removeClass("k-state-selected");
        },
        change or move or end?: function(e){
            if(e.newIndex==35){
                 --e.newIndex;
                 console.log(e.newIndex); //output is 34, but the element is moved to 35
            }
        }
});

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

Поэтому пункт А должен оставаться на своей позиции.

1 ответ

Решение

Я нашел ответ, и вот демо: https://demos.telerik.com/kendo-ui/sortable/filter-disable.

Для моего конкретного случая: нет необходимости изменять e.newIndex.

С filter: "div.myclass.sortable"Я допускаю, что только div с классом "sortable" являются сортируемыми. Я даю всем элементам div.myclass сортируемый класс (в моем Kendo-listview-template).

Чтобы предотвратить сортировку div, я ищу его и удаляю класс sortable:

var sortableItems = $(".sortable");
var nonSortableItem = sortableItems[35];               

nonSortableItem.classList.remove("sortable"); //now that one stays fix 

Если вы просто хотите, чтобы вы не могли переместить элемент (но он не должен оставаться неподвижным при перемещении других элементов), вы должны использовать отключение вместо фильтра (см. Также в демонстрации выше).

Другие вопросы по тегам