2011-01-13 13 views
5

İstenilen davranış:Sürüklenebilir Sürüklerken sürüklenebilen öğeler Ekleme

Kullanıcı bir öğeyi bir ağaca sürükler. Kapalı bir düğüm üzerinde gezindikten sonra, düğüm çocukları açığa çıkarır. Bu noktada kullanıcı, çocuk düğümlerine sürüklemeye devam edebilir ve bunlardan herhangi birine bırakabilir.

Bu iyi çalışıyordu. Düğümün genişletilmesi ve çocukların düşürülmesini sağlamak için sarkıtların "aşırı" seçeneğini kullanıyorum.

Bazı özellikler eklemem gerekiyordu. İlk önce sürüklenebilirler için bir yardımcı ekledim. Hala iyi çalışıyor. Sonra sürükleyicileri ve damlacıkları iki farklı kaba (div) koydum. Bu noktada, yardımcı kaptan dışarı sürüklenmeyecekti. Çözüm, "appendTo: 'body'" öğesini sürüklenecek şekilde ayarlıyordu. Hepsi iyi ... iyi, pek de değil.

Artık çocuk düğümleri, geçerli sürükle işlemi sırasında ürününü ürünle teslim edilemez. Kullanıcı mevcut sürükle bırakmalı ve istenen çocuk düğümünde yeniden çizmelidir. Ben appendTo seçeneği kaldırırsam, sorun gider, ancak yardımcısı görsel olarak bırakılabilir kapsayıcıya taşınmaz.

Bu yeni damlacıkların onları hemen yok edilebilmeleri için "uyandırabileceğim" bir yolu var mı?

cevap

6

Neredeyse aynı problemi çözdüm. Sürüklenebilir bir dosyayı sürüklerken düğümü açtığımda benim durumumda, çocuk öğeleri ajax yoluyla yüklenir ve sonra da düşürülebilir öğeler olarak başlatılır. Sonra bunu yapmak zorunda:

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

Bu sürüklenebilir akım sürükle katılmak üzere yeni droppables için yeterli refreshPositions seçenek true sürece sahip kılar. Tüm sürükle sırasında refreshPositions seçeneğinin de true olmasını sağlayabilirsiniz, ancak istemediğim bir performans cezası verir.

Bunu başka şekilde yapmanın bir yolunu bulamadım. Sürüş sırasında sadece pozisyonları yenilemek için arayabileceğiniz bir yöntem olsaydı, en iyisi olurdu, ama yok.