如何防止在 Kendo 可排序/集成 - ListView 中对项目进行排序(固定位置)?

How to prevent an item to be sorted (fix positon) in 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
            }
        }
});

我想防止拖动的项目可以插入到 itemA 之后(相反,它可以插入到上一个索引)并且不能拖动 itemA。

所以itemA必须固定在它的位置上。

我找到了答案,这是一个演示:https://demos.telerik.com/kendo-ui/sortable/filter-disable .

对于我的具体情况: 不需要修改e.newIndex.

对于 filter: "div.myclass.sortable",我允许只有 class "sortable" 的 div 是可排序的。 我为所有 div.myclass 元素提供 class 可排序(在我的 Kendo-listview-template 中)。

为了防止 div 被排序,我搜索它并删除 class 可排序的:

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

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

如果你只是想让你不能移动一个项目(但它不必在其他项目移动时保持固定),你必须使用 disable 而不是过滤器(@另见上面的演示)。