मैं किसी उपयोगकर्ता को फ्लेक्स ट्री फ़ोल्डर में वस्तुओं को पुन: व्यवस्थित करने की अनुमति देना चाहता हूं, लेकिन उन आइटम को फ़ोल्डर के बाहर नहीं ले जाना चाहता हूं। मैं बाहरी बूंद को सफल होने से रोक सकता हूं, लेकिन मैं उपयोगकर्ता प्रतिक्रिया (ड्रॉप से पहले) देना चाहता हूं कि ड्रॉप सफल नहीं होगा। मुझे ड्रॉप एक्शन के बारे में कई उदाहरण मिल गए हैं, लेकिन कुछ भी नहीं जो उपयोगकर्ता को सही प्रतिक्रिया दिखाता है।फ्लेक्स पेड़ ड्रॉप फीडबैक को रोकना
ट्री प्रलेखन के अनुसार, dragOver
ईवेंट के दौरान मुझे DragManager.showFeedback(DragManager.NONE)
पर कॉल करने में सक्षम होना चाहिए, लेकिन यह काम नहीं कर रहा है। एक लघु नमूना परियोजना नीचे शामिल है। ड्रैग इवेंट के दौरान उपयोगकर्ता को इंगित करने का कोई तरीका है कि ड्रॉप सफल नहीं होगा?
किसी भी समाधान के लिए अग्रिम धन्यवाद!
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
width="354"
height="480">
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.core.IUIComponent;
import mx.core.mx_internal;
import mx.events.DragEvent;
import mx.events.FlexEvent;
import mx.managers.DragManager;
protected function tree_dragEnterHandler(event:DragEvent):void {
// only items can be dragged - not folders
if ([email protected] == "item") {
DragManager.acceptDragDrop(IUIComponent(event.currentTarget));
} else {
event.preventDefault();
DragManager.showFeedback(DragManager.NONE);
}
}
protected function tree_dragOverHandler(event:DragEvent):void {
var dropData:Object = tree.mx_internal::_dropData;
var dragItem:XML = event.dragSource.dataForFormat("treeItems")[0];
if (!dropData || !dropData.parent || !dragItem.parent() || dragItem.parent() != dropData.parent) {
trace("preventing drop");
DragManager.showFeedback(DragManager.NONE);
return;
}
trace("allowing drop");
DragManager.showFeedback(DragManager.MOVE);
}
protected function tree_dragDropHandler(event:DragEvent):void {
}
]]>
</fx:Script>
<fx:Declarations>
<fx:XML id="treeData">
<folder id="root"
label="root"
type="root">
<folder id="folder1"
label="Folder 1"
type="folder">
<folder id="folder2"
label="Folder 2"
type="folder">
<item id="item1"
label="Item 1"
type="item"/>
<item id="item2"
label="Item 2"
type="item"/>
<item id="item3"
label="Item 3"
type="item"/>
<item id="item4"
label="Item 4"
type="item"/>
<item id="item5"
label="Item 5"
type="item"/>
</folder>
</folder>
<folder id="folder3"
label="Folder 3"
type="folder"/>
<folder id="folder4"
label="Folder 4"
type="folder"/>
<folder id="folder5"
label="Folder 5"
type="folder"/>
</folder>
</fx:XML>
</fx:Declarations>
<mx:Tree id="tree"
left="29"
right="28"
top="28"
bottom="27"
dragEnabled="true"
dropEnabled="true"
dragMoveEnabled="true"
dataProvider="{treeData}"
labelField="@label"
dragEnter="tree_dragEnterHandler(event)"
dragOver="tree_dragOverHandler(event)"
dragDrop="tree_dragDropHandler(event)"
showRoot="false">
</mx:Tree>
</s:WindowedApplication>
dragEnterHandler में अपने सभी तर्क डालने का प्रयास करें - प्रलेखन कहा गया है कि DragEvent.DRAG_ENTER इस्तेमाल किया जाना चाहिए (नहीं DragEvent.DRAG_OVER) –
dragEnterHandler() केवल खींचें के शुरू में एक बार कहा जाता हो जाता है। मैं कर्सर के नीचे आइटम के आधार पर ड्रैग के दौरान प्रतिक्रिया को बदलने में सक्षम होना चाहता हूं। –
ऐसा इसलिए हो रहा है क्योंकि जब आप ट्री के ड्रैग और ड्रॉप व्यवहार के निर्माण के तुरंत बाद "NONE" पर ड्रैग फीडबैक सेट करते हैं तो इसे वापस "MOVE" पर सेट किया जाता है। [यह पृष्ठ] (http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf69084-7cfe.html) ड्रैग और ड्रॉप के दो उदाहरण दिखाता है, एक गैर-सूची नियंत्रण के लिए, और सूची आधारित नियंत्रणों के लिए एक (जैसे पेड़)। सूची आधारित उदाहरण में, आपको 3 विकल्प दिए गए हैं: व्यवहार में निर्मित, अपना रोल करें, या दोनों के संयोजन का उपयोग करें। आप बाद वाले कर रहे हैं, जब आप ड्रैग फीडबैक को "नहीं" पर सेट करते हैं तो यह डिफ़ॉल्ट व्यवहार से ओवरराइड हो जाता है। –