FlashBuilder4.6を使用してユニプロジェクト用のアプリを作成しています。カスタムSparkコンポーネントがあり、PHPスクリプトを介して返されるXML要素の数に応じて、実行時にそのコンポーネントのインスタンスを動的に作成する必要があります。
これは少し混乱するかもしれないので、次の手順を書いてみましょう。1)アプリケーションは、サーバーでホストされているPHPスクリプトにHTTPService要求を送信します。2)PHPはSQLデータベースにアクセスし、一連のXMLデータを返します。3)ActionScriptは、カスタムFlexコンポーネントのXインスタンスを動的に作成します。ここで、XはXML内のデータの数です。
これが私がこれまでに持っているコードです(私がそれを機能させようとしているので、それはおかしいです):
ActionScript:
[Bindable]
public var holderArray:Array = new Array(100);
public function createMenu(e:MouseEvent):void {
var count:int = 0;
var curMenuItem:menuItemContainer = new menuItemContainer();
while (count < loadedMenu.length){
curMenuItem.itemName = loadedMenu.getItemAt(count).name;
curMenuItem.itemDesc = loadedMenu.getItemAt(count).description;
curMenuItem.itemPrice = numForm.format(loadedMenu.getItemAt(count).price);
curMenuItem.imageFile = loadedMenu.getItemAt(count).url;
//curMenuItem.y = count * 120
//menuItemGroup.addElement(curMenuItem);
holderArray[count] = curMenuItem;
count ++;
}
//testString = holderArray[1].itemName;
var count2:int = 0;
for each (var menuItem:menuItemContainer in holderArray){
menuItem.name = "menuItem" + count2;
menuItem.id = "menuItem" + count2;
//testString += menuItem.name;
menuItemGroup.addElement(menuItem);
count2++;
}
}
MXML:
<s:VGroup id="menuItemGroup" x="40" y="150">
</s:VGroup>
そのコードで起こっているように見えるのは、返される3つのXMLデータのそれぞれがmenuItemContainerのインスタンスで使用されていることですが、それぞれがmenuItemGroupに追加されると、すでに存在するものが上書きされます。アイテムが実際に上書きされているのか、それとも新しいアイテムが前のアイテムの上にあるのかはわかりませんが、後者が当てはまる場合は、コンポーネントを配置する方法が見つかりません。ループ内でmenuItem.yを(count2の関数として)設定しようとしましたが、役に立ちませんでした。
ありとあらゆる提案/回答を事前に感謝します。ベンジャミン。