2012-05-30 21 views
1

我有两个自定义绑定拖放,并有一个元素,我需要放入一个droppable区域的列表,但是当这种情况我需要删除从我的源列表拖动元素,我做的像下面的方式,但是当拖动的元素从源列表中删除时,我收到以下错误“无法获取属性的值'选项':object is null or 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); 

    }); 
     } 
    ); 
}); 
+0

你能张贴此作为一个小提琴这对你的作品:)?这将有助于解决您的问题。 –

+0

我遇到了同样的问题,我使用的是计算数组,因此将提出什么不适合我。让我知道,如果你想出这一个。 – jornare

回答

0

尝试使用分离(),而不是删除()。

0

我设法通过添加一个“setTimeout”来让拖动操作在敲除之前完成,从列表中删除元素来解决错误。

在你的情况下,代码的变化应该是这样的:

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

希望

相关问题