Kendo ListBox: возвращает удаленные элементы по порядку

#javascript #jquery #kendo-ui

#javascript #jquery #kendo-пользовательский интерфейс

Вопрос:

Я использую два списка, связанных друг с другом, которые позволяют перетаскивать между ними. Хотя использование кода изменения порядка, найденного в другом потоке, устраняет проблему с изменением порядка элементов в том же списке, это не устраняет проблему при перетаскивании элемента из одного списка в другой. Я понимаю, это потому, что это не действие «изменить порядок», это действие «удалить». Я пробовал много разных способов, например, используя событие «добавить», но в объекте (e) нет свойства «offset».

Как я могу выполнить то же самое, то есть сохранить удаленные элементы в том порядке, в котором они визуально удалены?

Вот моя функция виджета с событием reorder, которое правильно упорядочивает элементы по мере их отображения в ListBox (почему это не происходит автоматически, выше моего понимания!). Помните, событие reorder происходит только при перемещении элементов в пределах одного ListBox, а не при перетаскивании элемента из одного ListBox в другой.

 $("#myMenus").kendoListBox({
    draggable: true,
    connectWith: "baseMenus",
    dropSources: ["baseMenus"],
    add: function(e) {
        console.log('ADD');
        console.log(e);
    },
    reorder: function(e) {
        e.preventDefault();
        var dataSource = e.sender.dataSource;
        var dataItem = e.dataItems[0];
        var index = dataSource.indexOf(dataItem)   e.offset;
        dataSource.remove(dataItem);
        dataSource.insert(index, dataItem);
    },
});
  

Комментарии:

1. Я бы изучил демо-версию Telerik и посмотрел, чем она отличается от вашей. Желаемое поведение работает в их демо-версии.

Ответ №1:

Мне удалось выполнить ту же задачу, в зависимости от html-подсказки, которая появляется при удалении элемента во втором listbox. Я изменил ваш код с помощью решения.

 $("#myMenus").kendoListBox({
    draggable: true,
    connectWith: "baseMenus",
    dropSources: ["baseMenus"],
    add: function(e) {
        e.preventDefault();
        var dataSource = e.sender.dataSource;
        var dataItem = e.dataItems[0];
        var index = $('li.k-drop-hint').index();
        dataSource.insert(index, dataItem);
    },
    reorder: function(e) {
        e.preventDefault();
        var dataSource = e.sender.dataSource;
        var dataItem = e.dataItems[0];
        var index = dataSource.indexOf(dataItem)   e.offset;
        dataSource.remove(dataItem);
        dataSource.insert(index, dataItem);
    },
});