Как удалить элемент перетаскивания, когда был сброшен с помощью Knockout
У меня есть две пользовательские привязки для перетаскивания, и у меня есть список элементов, которые мне нужно перетащить в область сбрасывания, но когда это происходит, мне нужно удалить перетаскиваемый элемент из моего списка источников, я делаю следующим образом, но когда перетаскиваемый элемент был удален из списка источников, я получаю следующую ошибку "Невозможно получить значение свойства" параметры ": объект имеет значение null или undefined", и отладчик прерывается в моем jquery-ui.1.8.17 Файл.min.js, в этой строке var d=a(this).data("draggable").options
, Проблема возникает в привязке перетаскивания.
Вот мой код:
var viewModelInstance = new ViewModel();
$(document).ready(function () {
$(window).load(
function () {
var _dragged;
ko.bindingHandlers.drag = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
var dragElement = $(element);
var dragOptions = {
helper: 'clone',
revert: true,
start: function () {
_dragged = ko.utils.unwrapObservable(valueAccessor().value);
},
cursor: 'default'
};
dragElement.draggable(dragOptions).disableSelection();
}
};
ko.bindingHandlers.drop =
{
init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
var dropElement = $(element);
var dropOptions = {
drop: function (event, ui) {
var folder = dropElement[0].innerText;
viewModelInstance.UpdateCandidate(_dragged, viewModel, folder);
viewModelInstance.candidates.remove(_dragged);
}
};
dropElement.droppable(dropOptions);
}
};
ko.applyBindings(viewModelInstance);
});
}
);
});
2 ответа
Мне удалось обойти ошибку, добавив "setTimeout", чтобы операция перетаскивания завершилась до того, как нокаут удалит элемент из списка.
В вашем случае изменения кода должны быть примерно такими:
drop: function (event, ui) {
var folder = dropElement[0].innerText;
setTimeout( function(){
viewModelInstance.UpdateCandidate(_dragged, viewModel, folder);
viewModelInstance.candidates.remove(_dragged);
},10);
}
Надеюсь, что это работает для вас:)