dataItem(element)在KendoDraggable-KendoUI JQuery

时间:2018-12-14 11:20:17

标签: javascript jquery kendo-ui kendo-grid kendo-draggable

我在剑道网格行上定义了一个可拖动对象,例如:

$(grid.element).kendoDraggable({
    filter: "table > tbody > tr.grid-row.k-master-row",
    group: "grid-items",
    hint: function (element) {
        grid.collapseRow(element);
        element.addClass("k-state-selected");
        var template = kendo.template($("#grid-item-moving-template").html());
        console.log(element);
        var data = grid.dataItem(element);
        console.log(data);
        var hint = $(template(data));
        return hint;
    },
    cursorOffset: { top: 15, left: 30 }
});

我注意到,如果我开始拖动项目,则第一个项目正确显示,但是如果我将第一个项目拖放到放置区中,然后开始拖动第二个项目,则第二个项目的提示模板将包含第一个项目的定义。

这就是怪异之处,我在定义的内部进行了钻取,添加了提示功能2控制台日志,一个传递了元素,另一个是从使用dataItem()获取的网格返回的实际数据。虽然element总是正确的,但是如果我开始拖动1就会得到1,如果我开始拖动2就会得到2,则1和2的dataItem(element)总是返回第1行的行数据(但是只有在第一个物品已被放到放置区)。知道为什么会这样吗?这是剑道的内置功能。<​​/ p>

1 个答案:

答案 0 :(得分:0)

我发现了问题。

每当物品掉落时,我都会打电话:

e.draggable.currentTarget.remove(); 

在Droppable上,为了将其从包含的网格中删除,但是由于未刷新网格的dataSource,因此这些项目将从网格中消失,但它们仍将包含在dataSource中。 Kendo dataItem()下面将基于其数组索引查找该项目,因为删除后网格上有2个项目,而dataSource上有3个项目,这将导致索引不匹配(因为dataSource保留了先前的索引)现在被另一个物品占用了。

我个人认为,telerrik应该考虑使用guid索引而不是原始数组索引,这样就不会发生这种问题。

我现在将回调传递到包含droparea调用的闭包中:

    refreshGrid: function () {
        grid.dataSource.read();
        grid.refresh();
    }

这解决了问题。