如何防止Kendo Sortable / Integration-ListView中的项目进行排序(修复位置)?

时间:2018-11-08 16:13:54

标签: javascript events kendo-listview kendo-sortable

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必须保持位置固定。

1 个答案:

答案 0 :(得分:0)

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

对于我的具体情况: 无需修改e.newIndex。

对于filter: "div.myclass.sortable",我只允许分类为“ sortable”的divs进行排序。 我为所有div.myclass元素提供了可排序的类(在我的Kendo-listview-template中)。

为防止div排序,我对其进行搜索并删除可排序的类:

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

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

如果只希望您不能移动某个项目(但是当其他项目移动时它不必保持固定状态),则必须使用 disable (禁用)代替过滤器(@参见演示中的以上)。