动态创建使用XML数据填充的多个文本框

时间:2013-02-07 21:50:12

标签: xml actionscript-3 flash for-loop each

我应该进一步描述这一点。 在我的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());
     }
    }

我想要做的是使用相同的格式,为输出的每个项目创建一个文本框(在本例中为名称),这样我就可以使每个单独的项目可点击并添加一个功能。我希望用“为每个人”这样做,但是没有一个明确的方法来做到这一点。

有什么想法吗?我的AS3调用所有列出的内容,这可以达到50多项,所以我想动态添加它。

提前致谢!!

1 个答案:

答案 0 :(得分:0)

这是做你问的一个简单的例子。这会为容器TextField对象中的每个 Name 节点添加Sprite,然后向容器添加一个事件侦听器以捕获容器上发生的任何点击(&#&# 39;孩子们。)

在事件侦听器方法中,它会找出被点击的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);
    }
}