2011-01-13 2 views
5

원하는 동작 :끌기 동안 끌어 놓기 추가하기

사용자가 항목을 트리로 끌어옵니다. 닫힌 노드 위로 마우스를 가져 가면 노드가 확장되어 자식이 나타납니다. 이 시점에서 사용자는 자식 노드로 드래그를 계속하고 그 중 하나를 드롭 할 수 있습니다.

괜찮 았습니다. 나는 droppables의 "over"옵션을 사용하여 노드를 확장하고 자식을 삭제 가능하게 만듭니다.

하지만 더 많은 기능을 추가해야했습니다. 먼저 드래그 할 수있는 도우미를 추가했습니다. 아직도 잘 작동합니다. 그런 다음 draggables와 droppables를 두 개의 다른 컨테이너 (divs)에 넣습니다. 이 시점에서 도우미는 컨테이너 밖으로 끌리지 않습니다. 해결책은 draggables에 "appendTo : 'body'"를 설정하는 것이 었습니다. 모든 좋은 ... 잘, 아주.

이제 드래그 작업 중에 자식 노드가 이 아니고이 아닌 노드가 있습니다. 사용자는 현재 드래그 앤 레드 그리드를 원하는 자식 노드로 해제해야합니다. appendTo 옵션을 제거하면 문제가 사라지지만 도우미는 시각적으로 droppable 컨테이너로 이동하지 않습니다.

이러한 새로운 droppables를 "깨워서"즉시 제거 할 수있는 방법이 있습니까?

답변

6

이렇게하면 거의 동일한 문제가 해결됩니다. 드래그 할 때 드래그하는 동안 노드를 열어 놓는 경우, 자식 항목은 ajax를 통해로드 된 다음 droppables로 초기화됩니다. 그 때 나는이 작업을 수행해야한다 :

ui.draggable.draggable('option', 'refreshPositions', true); 
var tempFunc = function() { 
    if (ui.draggable) { 
     ui.draggable.off('drag', tempFunc); 
     setTimeout(function() { 
      ui.draggable.draggable('option', 'refreshPositions', false); 
     }, 100); 
    } 
}; 
ui.draggable.on('drag', tempFunc); 

이것은 드래그 현재 드래그 가입 할 새로운 droppables 충분히 refreshPositions 옵션 true 한을 가지고 있습니다. 전체 드래그 중에 refreshPositions 옵션을 true으로 설정할 수도 있지만, 원하지 않는 성능 저하가 발생합니다.

나는 다른 방법으로 그것을 할 방법을 찾지 못했습니다. 위치를 새로 고치기 위해 드래그하는 동안 호출 할 수있는 방법이 있다면 가장 좋을 것입니다. 그러나 그렇지 않습니다.

관련 문제