因此,Flex为用户操作数据馈送控件提供了很好的API,但是,就我而言,一旦用户完成播放,我无法弄清楚如何将数据从控件中取回它。具体来说,我已经在Tree组件上启用了dragMove控件,但我无法弄清楚如何将用户启动的更改恢复为我可以写回db的XML数据。
当用户重新排序树时,dataProvider中没有注册任何更改,并且如果dataDescriptor正在注册这些更改,我不知道如何恢复数据。 dataDescriptor方法getData()调用节点参数....哪个节点?来自自己的dataProvider的节点??我不明白。有什么想法吗?
答案 0 :(得分:1)
我相信你要做的就是听取dragOver事件并操纵该处理程序中的结果数据。拖放支持主要用于从一个列表控件转移到另一个控件。
答案 1 :(得分:1)
CookieOfFortune是正确的:如果你想做的不仅仅是标称拖放(例如检测更改并将它们传播到数据库),你可能需要使用拖动和放大器。删除树上的界面。
您还可以设置侦听器以检测树何时发生更改(例如,已发生选择)。这适用于选择和拖动&下降。
不知道你在做什么,这里有一些代码。我只是覆盖dragComplete
,以显示如何检测事件。
<?xml version='1.0'?>
<mx:Application xmlns:mx='http://www.adobe.com/2006/mxml' backgroundGradientColors='[0xFFFFFF,0xAAAAAA]'>
<mx:Script>
<![CDATA[
import mx.events.DragEvent;
import mx.controls.Alert;
[Bindable]
private var treeData:XML =
<root>
<node label="foo">
<node label="bar" />
</node>
<node label="baz">
<node label="buzz">
<node label="foobar" />
</node>
</node>
</root>;
private function detectChange(event:Event):void {
Alert.show("change detected!");
}
private function detectDragComplete(event:DragEvent):void {
Alert.show("drag completed!");
}
]]>
</mx:Script>
<mx:Tree id="tree" labelField="@label"
dataProvider="{treeData.node}" width="200"
dragEnabled="true"
dropEnabled="true"
dragMoveEnabled="true"
dragComplete="detectDragComplete(event)"
change="detectChange(event)" />
</mx:Application>
以下是一些链接,其中包含有关各种控件中拖放功能的更多信息:
答案 2 :(得分:0)
我必须做同样的事情。我在dataEvider上为CollectionEvent.COLLECTION_CHANGE事件上的树设置了一个事件监听器。
public function init():void{
//watch the tree dataProvider changes.
BindingUtils.bindSetter(setUpDataChangeListner,_tree,["dataProvider"]);
}
public function setUpDataChangeListner(value:XMLListCollection):void{
//set up the event listener for the dataProvider as long as it is not null
if(value)
value.addEventListener(CollectionEvent.COLLECTION_CHANGE,onTreeChanged,false,0,true);
}
public function onTreeChanged(event:CollectionEvent):void{
trace("fun");
}