Проблема была решена давно. Извините за последнее обновление. Решение, которое я изложил, может быть не лучшим, но мне это достаточно. Позже я постараюсь улучшить его дальше.
Короче говоря, сначала я обновил источник данных пустым массивом, а затем обновил последнее значение кавычки внутри таймаута $, чтобы обновить его. Поскольку перетаскивание происходит между независимыми экземплярами директивы multiselect, мне также пришлось передать экземпляр multiselect invoker для завершения, чтобы я мог обновить исходный источник данных экземпляра после завершения операции удаления. Ниже приведены фрагменты
Функция инициализации целевой цели -
$scope.initializeDropTarget = function () {
$scope.unifyMultiSelect.tagList.parent().kendoDropTarget({
group: "multiSelectGroup",
drop: function (e) {
var parentMultiselectOptions = e.draggable.options.parentMultiselectOptions;
//check if drop target is different multiselect instance
if (parentMultiselectOptions.instanceId != $scope.options.instanceId) {
var item = e.draggable.options.dataValue;
var multiselectItems = $scope.options.getSelectedObjects();
var selectedItem = _.find(multiselectItems, function (i) {
return i[$scope.options.dataValueField] == item[$scope.options.dataValueField];
});
if (!selectedItem) {
multiselectItems.push(item);
$scope.options.setSelectedObjectValues([]);
$timeout(function () {
$scope.options.setSelectedObjectValues(multiselectItems);
}, 500);
finalizeDraggableItem(e.draggable);
}
}
//if dropped to same multiselect instance
else {
finalizeDraggableItem(e.draggable);
}
}
});
};
finalizeDraggableItem -
function finalizeDraggableItem(draggable) {
var parentMultiselectOptions = draggable.options.parentMultiselectOptions;
var item = draggable.options.dataValue;
var multiSelectItems = parentMultiselectOptions.getSelectedObjects();
parentMultiselectOptions.setSelectedObjectValues([]);
$timeout(function () {
var filteredItems = _.filter(multiSelectItems, function (i) {
return i[$scope.options.dataValueField] != item[$scope.options.dataValueField];
});
//re organize selection if dropped to same multiselect
if (parentMultiselectOptions.instanceId == $scope.options.instanceId) {
filteredItems.push(item);
}
parentMultiselectOptions.setSelectedObjectValues(filteredItems);
draggable.destroy();
draggable.element.remove();
}, 500);
};
инициализировать функцию Draggable -
$scope.options.initializeDraggable = function (selectedItems, isLastElement) {
var listElements = isLastElement ? $scope.unifyMultiSelect.tagList.find('li:last-child') : $scope.unifyMultiSelect.tagList.find('li');
for (var i = 0; i < selectedItems.length; i++) {
var selectedItem = selectedItems[i];
var element = $(_.find(listElements, function (el) {
return el.innerText.trim().replace(/s+/g, " ") == selectedItem[$scope.options.dataTextField].trim().replace(/s+/g, " ");//remove extra spaces and check
}));
if (element.length > 0) {
element.kendoDraggable({
group: "multiSelectGroup",
dataValue: selectedItem,
parentMultiselectOptions: $scope.options,
hint: function (element) {
return element.clone();
}
});
}
}
};
Закрытие проблемы разрешено. Пожалуйста, дайте мне знать, если кому-то нужна помощь. Благодаря!