Как показать список компонентов во Flex - PullRequest
1 голос
/ 07 октября 2011

Я создаю многопользовательскую игру, в которой при подключении к серверу сервер отправляет обратно список доступных комнат (в каждой комнате есть MaxPlayers, MinRank, TableId, TableName, Password), поэтому каждый раз, когда я получаю эти 5 строк, я создаю экземпляр компонента Mxml UI, который я создал, и заполните его соответствующей информацией.

В main.MXML я добавил переменную сценария AS3 для хранения объекта GameInstances, который я создал при возврате данных rcvd с сервера:

private var gameInstances:ArrayCollection = new ArrayCollection();

GameInstance.mxml - это компонент, в котором есть компоненты пользовательского интерфейса и скрипт 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 содержал для каждой игры подобный объект пользовательского интерфейса (чтобы показать его, конечно) enter image description here

Ответы [ 2 ]

0 голосов
/ 13 октября 2011

ОК, если вы используете коллекцию массива gameInstances в качестве поставщика данных для tableList, вам нужно сделать несколько вещей.
Во-первых, вам нужно сделать массив gameInstances коллекцией [Bindable]

Затем вам нужно добавить данные в коллекцию массивов, поскольку код, который вы опубликовали, показывает, что вы есть.

Далее необходимо создать средство визуализации пользовательских элементов для вашего списка таблиц.

Наконец, когда вы закончите изменение данных / добавление / удаление объектов из коллекции массива gameInstances, вам нужно gameInstances.refresh ();

[EDIT]
создайте файл с именем 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>
0 голосов
/ 07 октября 2011

Если я понимаю вопрос, когда вы создаете компоненты в ActionScript, вы должны добавить их в контейнер, прежде чем они будут описаны в пользовательском интерфейсе. Если у вас есть массив компонентов, вы можете просто зациклить этот массив и добавить каждый компонент как дочерний элемент в контейнер. Основной файл приложения является контейнером, поэтому вы можете сделать что-то вроде этого:

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

Было бы необычно использовать такой подход. Обычно вы просто добавляете компонент в родительский контейнер по мере их создания.

...