2011-01-13 27 views
5

Hành vi mong muốn:Thêm Droppables khi Kéo Draggable

Người dùng kéo một mục vào một cây. Khi lơ lửng trên một nút đã đóng, nút sẽ mở rộng tiết lộ các con. Tại thời điểm này người dùng có thể tiếp tục kéo đến các nút con và thả vào bất kỳ của chúng.

Điều này hoạt động tốt. Tôi sử dụng "over" tùy chọn của droppables để mở rộng các nút và làm cho trẻ em droppable.

Nhưng tôi cần thêm một số tính năng khác. Đầu tiên tôi thêm một helper cho draggables. Vẫn làm việc tốt. Sau đó, tôi đặt các vật dụng kéo và vật nhỏ giọt vào hai thùng chứa khác nhau (div). Tại thời điểm này, người trợ giúp sẽ không kéo ra khỏi thùng chứa. Giải pháp là đặt "appendTo: 'body'" trên các hình kéo. Tất cả tốt ... tốt, không hoàn toàn.

Bây giờ, các nút con là không phải có thể phân đoạn trong quá trình kéo hiện tại. Người dùng phải giải phóng kéo hiện tại và redrag vào nút con mong muốn. Nếu tôi xóa tùy chọn appendTo, vấn đề sẽ biến mất, nhưng sau đó trình trợ giúp không di chuyển trực quan vào vùng chứa có thể phân hủy.

Có cách nào để tôi có thể "thức dậy" những vật phẩm mới này để làm cho chúng có thể phân hủy ngay lập tức không?

Trả lời

6

Đây là cách tôi giải quyết được vấn đề gần như giống nhau. Trong trường hợp của tôi khi tôi chuyển đổi nút mở trong khi kéo một mục có thể kéo được, các mục con được tải qua ajax và sau đó chúng được khởi tạo dưới dạng các trình đơn có thể phân tách. Sau đó, tôi phải làm điều này:

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

Điều này làm cho kéo có đủ refreshPositions tùy chọn như true dài cho droppables mới tham gia kéo hiện tại. Bạn cũng có thể có tùy chọn refreshPositionstrue trong toàn bộ quá trình kéo, nhưng nó cho một hình phạt hiệu suất mà tôi không muốn.

Tôi không tìm cách làm theo cách khác. Nó sẽ là tốt nhất nếu có một phương pháp bạn có thể gọi trong khi kéo chỉ để làm mới các vị trí, nhưng không có.

Các vấn đề liên quan