我有一个带有2个Flex3控件的HorizontalList项目,其中一个已启用拖放。两个控件总是有相同数量的项,并且是相关的.第一个控件的索引0与第二个控件的索引0匹配,依此类推。
自然,当使用拖放重新排序第二个控件时,我希望第一个控件中的项反映相同的重新排序。我认为我可以处理控件的实际更新,但我在找到通过拖放移动的项的和到索引时遇到了困难。
在允许拖放的控件上使用dragDrop方法,并在调试器中仔细阅读event.currentTarget (而不是event.target 因为医生这么说)的内容,显示一个名为selectedIndex的公共属性,它似乎保存了索引中的,但我没有看到任何属性会告诉我到索引。
我能俯瞰这房子吗?我要根据别的什么来推断吗?有更好的方法吗?
更新:--一种可接受的解决方案也可能是迭代HorizontalList的内容,并将内部索引值保存到一个数组中,然后该数组可用于重新排序另一个列表的dataProvider;但我不知道如何迭代列表内容,因此我也陷入了困境。有什么帮助吗?
这是我的密码:
main.mxml:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application
xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:com="components.*"
layout="absolute"
>
<mx:Script>
<![CDATA[
import mx.events.DragEvent;
import mx.controls.Alert;
import mx.collections.ArrayCollection;
//these two variables are junk data to represent
//what we will get back from our data services...
[Bindable]
private var btnData:ArrayCollection = new ArrayCollection(
[
{title:'title1', index:0},
{title:'title2', index:1},
{title:'title3', index:2},
{title:'title4', index:3}
]
);
[Bindable]
private var chainData:ArrayCollection = new ArrayCollection(
[
{tmp:'testing 1'},
{tmp:'testing 2'},
{tmp:'testing 3'},
{tmp:'testing 4'}
]
);
//handle button re-ordering
private function handleBtnReorder(event:DragEvent):void{
Alert.show(event.action.toString());
}
]]>
</mx:Script>
<mx:HorizontalList
id="ChainView"
dataProvider="{chainData}"
itemRenderer="components.ItemRenderers.ChainLinkRenderer"
left="20"
right="20"
top="20"
height="300"
rowHeight="300"
columnWidth="500"
rollOverColor="#ffffff"
selectionColor="#eeeeee"
/>
<mx:HorizontalList
id="btnList"
dataProvider="{btnData}"
dragEnabled="true"
dropEnabled="true"
dragMoveEnabled="true"
dragDrop="handleBtnReorder(event)"
itemRenderer="components.ItemRenderers.BtnListRenderer"
horizontalCenter="true"
left="20"
right="20"
top="320"
height="50"
rowHeight="35"
rollOverColor="#ffffff"
selectionColor="#ffffff"
/>
</mx:Application>Alert.show(...)没有显示任何有用的东西,我在该行上设置了一个断点,以便检查事件参数。
我认为定制的itemRenderer并不重要(它们的代码还不多),所以为了简洁起见,我会把它们排除在外。如果你认为它们很重要,请告诉我,我会在这里编辑它们。
发布于 2009-05-07 14:43:33
结果是,解决方案是从使用dragDrop事件切换到dragComplete事件;此时,绑定的dataProvider已经更新以反映重新排序。
发布于 2010-02-12 10:59:45
这就是为什么模型定位器模式是为!
您必须将您的dataProvider移动到单个类(例如,模型),否则项目呈现器可以轻松地访问它。您的项目没有属性索引,因为它已经由ArrayCollection.getItemIndex(.)提供
https://stackoverflow.com/questions/831482
复制相似问题