Как удалить элемент перетаскивания, когда был сброшен с помощью 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);
}

Надеюсь, что это работает для вас:)

Попробуйте использовать detach(), а не remove().

Другие вопросы по тегам