如何在Flex中显示组件列表

时间:2011-10-07 01:05:46

标签: actionscript-3 flex

我正在构建一个多人游戏,当连接到服务器时,服务器会发回一个可用房间列表(每个房间都有MaxPlayers,MinRank,TableId,TableName,Password),所以每当我收到这5个字符串时,我创建我创建的Mxml UI组件的一个实例,并用相关的详细信息填充它。

在main.MXML中,我添加了一个AS3脚本变量来保存我从服务器返回rcvd数据时创建的GameInstances对象:

private var gameInstances:ArrayCollection = new ArrayCollection();

GameInstance.mxml是一个组件,其中包含UI组件,AS3脚本用于设置一些数据。 在main.mxml:

中从服务器获取数据时
var gameInstance:GameInstance = new GameInstance();
gameInstance.setTablePlayers(rcvdMsg[1]);
gameInstance.setTableMinRank(rcvdMsg[2]);
gameInstance.setTableId(rcvdMsg[3]);
gameInstance.setTableName(rcvdMsg[4]);
gameInstance.setTablePassword(rcvdMsg[5]);
gameInstances.addItem(gameInstance);

gameInstances包含该mxml组件的对象。 如何在main.mxml上显示该组件? 我有一个在main.mxml中,我想在其中直观地显示GameInstance对象。

这就是GameInstance.mxml的样子,我希望s:List为每个游戏保存一个像这样的UI对象(显示它的当前) enter image description here

2 个答案:

答案 0 :(得分:0)

如果我理解了这个问题,那么在ActionScript中创建组件时,必须先将它们添加到容器中,然后才能在UI中进行操作。如果您有一个组件数组,则可以遍历该数组并将每个组件作为子组件添加到容器中。主应用程序文件是一个容器,因此您可以执行以下操作:

for each(var myComp:UIComponent in myArrayList){
  addChild(myComp);
}

采用这种方法是不寻常的。通常,您只需在创建父组件时将其添加到父容器中。

答案 1 :(得分:0)

好的,如果你使用gameInstances arraycollection作为tableList的数据提供者,那么你需要做一些事情。
首先,你需要制作你的gameInstances arraycollection [Bindable]

然后,您需要将数据添加到数组集合中,因为您发布的代码显示了您的数据。

接下来,您必须为tableList创建自定义项呈示器。

最后,当您完成从gameInstances arraycollection更改数据/添加/删除对象时,您需要gameInstances.refresh();

[编辑]
创建一个名为myListRenderer.mxml的文件并将此代码放入其中

<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml">

  <mx:Script>
  <![CDATA[

  override protected function commitProperties():void{
    // this is where you assign your values
    // this function gets called every-time  the list scrolls
    super.commitProperties();
    players.text =  this.data.setTablePlayers
    minRank.text =  this.data.setTableMinRank;
    tableId.text =  this.data.setTableId;
    tableName.text =  this.data.setTableName;
    tablePassword.text =  this.data.setTablePassword;
  }

]]>
</mx:Script>

  <mx:Label id="players" />
  <mx:Label id="minRank" />
  <mx:Label id="tableId" />
  <mx:Label id="tableName" />
  <mx:Label id="tablePassword" />

</mx:VBox>