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

这是一个按照您的要求做的简单示例。这会TextField为容器对象中的每个Name节点Sprite添加一个,然后向容器添加一个事件侦听器,以捕获容器(以及它的子级)上发生的任何点击。

在事件侦听器方法中,它会找出TextField被单击的 s 的哪个实例并跟踪其内容。

您可能无法立即使用此代码,但它显示了如何完成此类操作的原理。

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 回答