У меня есть проект Flex3 с 2 элементами управления HorizontalList; один из которых с включенным перетаскиванием. Оба элемента управления всегда будут иметь одинаковое количество элементов и связаны ... индекс 0 из 1-го элемента управления совпадает с индексом 0 из 2-го элемента управления и т. Д.
Естественно, при использовании перетаскивания для изменения порядка второго элемента управления я хочу, чтобы элементы первого элемента отражали то же изменение порядка. Я думаю, что могу справиться с фактическим обновлением элемента управления, но у меня возникают проблемы с поиском индексов от и до элемента, который был перемещен с помощью перетаскивания.
Использование метода dragDrop
в элементе управления, который позволяет перетаскивать, и просмотр содержимого event.currentTarget
(вместо event.target
, потому что в документах написано так ) в отладчике, отображается общедоступный свойство с именем selectedIndex
, которое, похоже, содержит из индекса , но я не вижу никаких свойств, которые бы указывали мне индекс до .
Я смотрю на собственность? Должен ли я сделать вывод, основываясь на чем-то другом? Есть ли лучший способ сделать это?
update: Приемлемым решением также может быть перебор содержимого 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 важны (пока что для них не так много кода), поэтому я опущу их для краткости. Если вы думаете, что они важны, дайте мне знать, и я отредактирую их здесь.