0

これについてさらに説明する必要があります。私の AS3 では、現在、XML シートからテキスト フィールドに動的テキストを作成しています。私のコードは、これをさらに説明するのに役立つ次のようになります。

    function XMLLoader(e:Event):void
    {
        xmlData = new XML(e.target.data);
        ParseList(xmlData);

    }

    function ParseList(nameData:XML):void
    {
     var nameList:XMLList = nameData.Searchtext.Name;
     for each (var nameElement:XML in nameList){
      directory_text.appendText(nameElement.text() + "\n");
     trace(nameElement.text());
     }
    }

私がやりたいのは、同じ種類のフォーマットを使用して、出力された各アイテム (この場合は名前) のテキスト ボックスを作成して、各個別のアイテムをクリック可能にして機能を追加できるようにすることです。「for each」でこれを行うことを望んでいましたが、それを行う明確な方法はありません。

何か案は?の下にリストされているすべての AS3 呼び出しがあり、これは最大 50 個以上のアイテムに達する可能性があるため、動的に追加したいと考えています。

前もって感謝します!!

4

1 に答える 1

0

これは、あなたが求めたことを実行する簡単な例です。これにより、コンテナ オブジェクトにTextFieldfor every NameノードがSprite追加され、コンテナにイベント リスナーが追加されて、コンテナ (およびその子) で発生したクリックがすべてキャッチされます。

イベント リスナー メソッドでは、クリックされた のインスタンスをTextField特定し、その内容をトレースします。

このコードをすぐに使用することはできませんが、このようなことができる原理を示しています。

function parseList(nameData:XML):void {
    var nameList:XMLList = nameData.Searchtext.Name;

    var textContainer:Sprite = new Sprite();
    this.addChild(textContainer);

    for each (var node:XML in nameList) {
        var currTextField:TextField = new TextField();
        currTextField.text = node.text();
        currTextField.y = textContainer.height; //Place the textfield below any previous textfields
        currTextField.height = 30;
        currTextField.selectable = false;
        textContainer.addChild(currTextField);
    }

    textContainer.addEventListener(MouseEvent.CLICK, onTextClick);
}

function onTextClick(e:MouseEvent):void {
    if (e.target is TextField) {
        var currTextField:TextField = e.target as TextField;
        trace("This name was clicked:", currTextField.text);
    }
}
于 2013-02-07T22:42:55.013 に答える