У меня есть два mx:TileList
элемента управления, которые я использую, чтобы разрешить редактирование объектов в пакетном режиме. Первый содержит коллекцию всех доступных данных, а второй содержит текущий пакет. Оба связаны с ArrayCollections
, и с помощью встроенной функции drag-n-drop элемента управления TileList данные перемещаются из одного ArrayCollection
в другой, когда объект перетаскивается между ними.
Мне нужно изменить currentState
, чтобы отображать и сбрасывать элементы управления манипулированием партиями, когда счетчик партий меняется с 0 на n или n на 0 шт. Исходя из документации , я бы подумал, что мне следует прослушать событие dragComplete
, но мое тестирование показывает, что вместо запуска после удаления данных из исходного ArrayCollection и добавления к целевому ArrayCollection Он запускается (последовательно) между этими двумя действиями.
Оба списка похожи на это:
<mx:TileList
id="srcList"
dragEnabled="true"
dropEnabled="true"
dragMoveEnabled="true"
dataProvider="{images}"
dragComplete="handleDragComplete(event)"
allowMultipleSelection="true"
/>
А вот источник функции handleDragComplete
:
private function handleDragComplete(e:DragEvent):void{
trace(e.dragInitiator.name + '.dragComplete: batch.length=' + batch.length.toString());
trace(e.dragInitiator.name + '.dragComplete: images.length=' + images.length.toString());
if (batch.length > 0){
currentState = 'show';
}else{
currentState = '';
}
}
И, наконец, вот некоторые примеры вывода кода из кода. Все они запускаются один за другим.
Дело 1:
Приложение загружается с 10 объектами в первом списке, и пакет пуст. Я перетащил 1 объект из списка источников в список пакетов.
srcList.dragComplete: batch.length=1
srcList.dragComplete: images.length=10
(ожидаемый: 1,9)
Очевидно, что объект был добавлен в пакетную коллекцию ArrayCollection, но не удален из источника.
Случай 2:
Теперь я перетащу второй объект в пакет.
srcList.dragComplete: batch.length=2
srcList.dragComplete: images.length=9
(Ожидаемое: 2,8)
Во-первых, мы видим, что images.length изменилась, показывая, что объект, который я перетащил из списка источников в список пакетов, был удален ПОСЛЕ событие dragComplete сработало.
В этот раз происходит то же самое: новый объект добавляется в пакетную коллекцию ArrayCollection (batch.length = 2), событие dragComplete
запускается (запускает эти трассировки), а затем объект удаляется из исходной коллекции ArrayCollection.
Дело 3:
Теперь я перетащу оба изображения из списка пакетов обратно в их исходное местоположение в списке источников.
batchList.dragComplete: batch.length=2
batchList.dragComplete: images.length=10
(ожидаемое: 0,10)
Мы видим, что batch.length не уменьшился, но массив исходных изображений вернулся к своей первоначальной длине 10.
ВОПРОС: Я что-то не так делаю? Могу ли я послушать еще одно событие? ( Примечание: я попробовал и DragExit
, и DragDrop
, просто чтобы быть уверенным, и они ведут себя как ожидалось, но это не то, что мне нужно. ) Или есть другой способ получить данные, которые я хочу? Или ... я нашел ошибку в SDK?