Knockout.js 如何删除拖动元素,当使用敲除删除时

Knockout.js 如何删除拖动元素,当使用敲除删除时,knockout.js,drag-and-drop,custom-binding,Knockout.js,Drag And Drop,Custom Binding,我有两个自定义绑定要拖放,并且有一个元素列表,我需要将这些元素拖放到一个可拖放区域中,但是当发生这种情况时,我需要从源列表中删除被拖动的元素,我的操作方式如下,但是当从源列表中删除被拖动的元素时,我收到以下错误“无法获取属性“options”的值:对象为null或未定义”,调试器在我的jquery-ui.1.8.17.min.js文件中的这一行var d=a(this).data(“draggable”).options。问题发生在拖动绑定中 这是我的密码: var viewModelInst

我有两个自定义绑定要拖放,并且有一个元素列表,我需要将这些元素拖放到一个可拖放区域中,但是当发生这种情况时,我需要从源列表中删除被拖动的元素,我的操作方式如下,但是当从源列表中删除被拖动的元素时,我收到以下错误“无法获取属性“options”的值:对象为null或未定义”,调试器在我的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);

    });
        }
    );
});

尝试使用detach()而不是remove()。

我通过添加一个“setTimeout”来绕过这个错误,以便在knockout从列表中删除元素之前完成拖动操作

在您的情况下,代码更改应该如下所示:

drop: function (event, ui) {
    var folder = dropElement[0].innerText;
    setTimeout( function(){
        viewModelInstance.UpdateCandidate(_dragged, viewModel, folder);
        viewModelInstance.candidates.remove(_dragged);
    },10);
}

希望这对你有用:)

你能把这当作一把小提琴吗?这将有助于解决你的问题。我也有同样的问题,而且我使用的是计算数组,所以威尔建议的东西对我不起作用。如果你能解决这个问题,请告诉我。