Я новичок в Flex и использую TileList, связанный с ArrayCollection. Коллекция массивов пуста во время загрузки, а затем обновляется в соответствии с результатами вызова HTTPService. Проблема в том, что средства визуализации элементов не отображаются должным образом, я предполагаю, потому что не было данных, когда они были впервые отображены во время загрузки. Вот упрощенный пример:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" >
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
[Bindable]
public var myList1:ArrayCollection = new ArrayCollection();
[Bindable]
public var myList2:ArrayCollection = new ArrayCollection([{item:"foo"}, {item:"bar"}]);
public function updateMyList():void
{
myList1.source = [{item:"foo"}, {item:"bar"}];
}
]]>
</mx:Script>
<mx:Button id="myButton" label="Update My List"
click="updateMyList();"/>
<mx:TileList dataProvider="{myList1}"
direction="vertical"
width="800" >
<mx:itemRenderer>
<mx:Component >
<mx:Canvas backgroundColor="yellow" >
<mx:Label text="{data.item}" width="800" />
</mx:Canvas>
</mx:Component>
</mx:itemRenderer>
</mx:TileList>
<!-- This one renders as expected -->
<mx:TileList dataProvider="{myList2}"
direction="vertical"
width="800" >
<mx:itemRenderer>
<mx:Component >
<mx:Canvas backgroundColor="yellow" >
<mx:Label text="{data.item}" width="800" />
</mx:Canvas>
</mx:Component>
</mx:itemRenderer>
</mx:TileList>
</mx:Application>
Вы заметите, что второй TileList, чьи привязки содержат данные во время загрузки, отрисовывается, как и ожидалось (шириной 800 пикселей), бит, в котором первый TileList отображается, имеет неверную ширину и имеет полосы прокрутки вокруг него.
Может ли кто-нибудь объяснить, почему это происходит, или даже предложить какие-то обходные пути, чтобы избежать этого?
С уважением,
Chris