2011-01-13 17 views
5

वांछित व्यवहार:ड्रैगगेबल को खींचते समय ड्रैगगेबल

उपयोगकर्ता एक पेड़ पर एक आइटम ड्रैग करता है। एक बंद नोड पर होवर करने पर, नोड बच्चों को प्रकट करता है। इस बिंदु पर उपयोगकर्ता बच्चे नोड्स पर खींचना जारी रख सकता है और उनमें से किसी पर भी ड्रॉप कर सकता है।

यह ठीक काम कर रहा था। मैं नोड का विस्तार करने और बच्चों को छोड़ने योग्य बनाने के लिए ड्रॉपपेल के "ओवर" विकल्प का उपयोग करता हूं।

लेकिन मुझे कुछ और सुविधाएं जोड़ने की आवश्यकता थी। सबसे पहले मैंने ड्रैगगेबल के लिए एक सहायक जोड़ा। अभी भी ठीक काम कर रहा है। फिर मैंने ड्रैगगेबल्स और ड्रॉपपैबल्स को दो अलग कंटेनर (divs) में डाल दिया। इस बिंदु पर, सहायक कंटेनर से बाहर नहीं खींच जाएगा। समाधान ड्रैगगेल पर "appendTo: 'body'" सेट करना था। सब अच्छा ... अच्छा, बिल्कुल नहीं।

अब वर्तमान ड्रैग ऑपरेशन के दौरान ड्रॉपपबल नहीं हैं। उपयोगकर्ता को वांछित बाल नोड में वर्तमान ड्रैग और रेड्रैग जारी करना होगा। यदि मैं appendTo विकल्प को हटा देता हूं, तो समस्या दूर हो जाती है, लेकिन फिर सहायक सहायक ड्रॉप-डाउन कंटेनर में नहीं जाता है।

क्या कोई तरीका है कि मैं इन नए ड्रॉपपैबल्स को "जागृत" कर सकता हूं ताकि उन्हें तुरंत छोड़ दिया जा सके?

उत्तर

6

इस प्रकार मुझे लगभग एक ही समस्या हल हो गई। मेरे मामले में जब मैं ड्रैगगेबल खींचने के दौरान नोड को खोलता हूं, तो बच्चे आइटम AJAX के माध्यम से लोड होते हैं और फिर उन्हें ड्रॉपपैबल्स के रूप में प्रारंभ किया जाता है। तब मैं यह करने के लिए है:

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 भी हो सकता है, लेकिन यह एक प्रदर्शन जुर्माना देता है जो मैं नहीं चाहता हूं।

मुझे इसे किसी अन्य तरीके से करने का कोई तरीका नहीं मिला। यदि सबसे अच्छी स्थिति होगी तो आप ड्रैग के दौरान केवल उन पदों को रीफ्रेश करने के लिए कॉल कर सकते हैं, लेकिन ऐसा नहीं है।

संबंधित मुद्दे