2011-01-13 5 views
5

Pożądane zachowanie:Dodawanie obiektów typu Droppables podczas przeciągania Przeciąganie

Użytkownik przeciąga element na drzewo. Po najechaniu na zamknięty węzeł, węzeł rozszerza się, odsłaniając dzieci. W tym momencie użytkownik może kontynuować przeciąganie do węzłów podrzędnych i upuszczać je na dowolnym z nich.

To działało poprawnie. Używam opcji "over" droppables, aby rozwinąć węzeł i sprawić, by dzieci były zrzucane.

Ale potrzebowałem dodać więcej funkcji. Najpierw dodałem pomocnika dla draggables. Nadal działa dobrze. Następnie umieściłem draggables i droppables w dwóch różnych pojemnikach (div). W tym momencie pomocnik nie przeciągałby się z pojemnika. Rozwiązaniem było ustawienie "appendTo:" body "" na draggables. Wszystko dobrze ... no, nie całkiem.

Teraz węzły podrzędne są nie zrzucane podczas bieżącej operacji przeciągania. Użytkownik musi zwolnić bieżący przeciągnij i ponownie pobrać do pożądanego węzła potomnego. Jeśli usunę opcję appendTo, problem zniknie, ale wtedy pomocnik nie będzie wizualnie przenosił się do kontenera, który można zrzucić.

Czy jest jakiś sposób, że mogę "obudzić" te nowe droppables, aby natychmiast je zrzucić?

Odpowiedz

6

W ten sposób rozwiązano prawie ten sam problem. W moim przypadku, gdy przełączam węzeł otwarty podczas przeciągania przeciągania, elementy potomne są ładowane przez ajax, a następnie są inicjowane jako droppables. Potem muszę to zrobić:

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); 

To sprawia, że ​​przeciągany mieć refreshPositions opcja jak true wystarczająco długo dla nowych droppables dołączyć aktualny opór. Możesz także mieć opcję refreshPositions przez cały przeciąg, ale daje ona karę wykonania, której nie chcę.

Nie znalazłem sposobu, aby zrobić to w inny sposób. Byłoby najlepiej, gdyby istniała metoda, którą można wywołać podczas przeciągania, tylko po to, aby odświeżyć pozycje, ale tak nie jest.