dataItem (element) возвращает неверный элемент внутри KendoDraggable - KendoUI JQuery - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть перетаскиваемый элемент, определенный в строках сетки кендо, например:

$(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 ().Хотя элемент всегда корректен, если я начинаю перетаскивать 1, я получаю 1, если я начинаю перетаскивать 2, я получаю 2, dataItem (элемент) как для 1, так и для 2 всегда возвращает данные строки для строки 1 (но это происходит, только если первыйпредмет уже был сброшен в дропзону)Есть идеи, почему это может происходить?Это встроенная функция кендо.

1 Ответ

0 голосов
/ 14 декабря 2018

Я нашел проблему.

Всякий раз, когда элемент будет отброшен, я буду вызывать:

e.draggable.currentTarget.remove(); 

В Droppable, чтобы удалить его из содержащей сетки, но поскольку источник данных для сетки не обновлялся,элементы исчезнут из сетки, но они все равно будут содержаться в источнике данных.Под Kendo dataItem () будет искать элемент на основе его индекса массива, так как у нас было 2 элемента в сетке, но 3 элемента в dataSource после удаления, что привело бы к несоответствию индекса (так как предыдущий индекс содержался в dataSourceтеперь был занят другим элементом).

Лично я считаю, что Telerik следует рассмотреть возможность индексации его с помощью ключа guid, а не необработанного индекса массива, чтобы такие проблемы не возникали.

IТеперь передайте обратный вызов в замыкание, содержащее вызов droparea:

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

И это решило проблему.

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