动作脚本3中的字符串到实例名称

时间:2010-02-25 11:59:16

标签: actionscript-3

我遇到了as3的问题

var eventChildren:XMLList = eventInput.channel.children();
var nr:Number;
nr=0;
for each (var eventInfo:XML in eventChildren) {

    nr++;
    trace(eventInfo.title);
    var ev="ev"+String(nr);
    var titl="title"+String(nr);
    trace(ev);
    trace(titl);

    var newEV:Object = Object(ev);
    var newTITL:Object = Object(titl);

    trace(newEV);
    trace(newTITL);

    newEV.newTITL.text=eventInfo.title;

}

}

这是我的代码,我正在尝试为eventChild的每个子实例设置标题值, 因为我是动作脚本的新手,特别是动作脚本3我真的不知道我在这里做错了什么。我正在尝试从eventChildren中的值设置ev1.title1,ev2.title2等的文本,如下所示:first child,设置ev1.title1,second ev2.title2等等。关于我应该在代码中改变什么或在哪里寻找一些信息的任何想法?

编辑:谢谢你的帮助,两个答案都把我带到了正确的解决方案:

for each (var eventInfo:XML in eventChildren) {

    nr++;

    trace(eventInfo.title);
    var ev="ev"+String(nr);
    var titl="title"+String(nr);
    //trace(ev);
    //trace(titl);

    var oTitle:Object = {}; // create object for the field titleXX
    oTitle[titl] = {text:eventInfo.title}; // create and assign the field text to a new object
    allFields[ev] = oTitle; // assign the title object to the field evXX

 }

ev1.title1.text=allFields.ev1.title1.text;
ev2.title2.text=allFields.ev2.title2.text;
ev3.title3.text = allFields.ev3.title3.text;
ev4.title4.text=allFields.ev4.title4.text;

2 个答案:

答案 0 :(得分:2)

ev和titl是Strings而不是Object as3中没有eval,因此您将无法根据字符串名称创建新变量。但您可以创建一个新的Object,其中包含基于ev字符串的字段:

var o:Object={};
o[ev]="....";

因此,如果ev等于字符串“ev1”,您将拥有一个名为ev1 =>的字段的对象。 o.ev1 = ...

对于标题,您可以创建一个新的Object,它将具有基于titl字符串的字段:

var o:Object={};
o[titl]="...";

因此,如果titl等于字符串“title1”,您将拥有一个名为title1 =>的字段的对象。 o.title1 = ...

同样的事情是你必须创建一个Object来保存文本字段。

将所有这些信息混合到最后:

var eventChildren:XMLList = eventInput.channel.children();
var nr:Number=0;
var AllFields:Object={};

for each (var eventInfo:XML in eventChildren) {
    nr++;
    trace(eventInfo.title);
    var ev="ev"+String(nr);
    var titl="title"+String(nr);
    trace(ev);
    trace(titl);

    var oTitle:Object = {}; // create object for the field titleXX
    oTitle[titl] = {text:eventInfo.title}; // create and assign the field text to a new object
    allFields[ev] = oTitle; // assign the title object to the field evXX
 }

// then you can have access to all your field within the object allFields
trace(allFields.ev1.title1.text)
trace(allFields.ev2.title2.text)

有关对象表示法,请参阅此question

答案 1 :(得分:2)

您可以使用'this'创建变量名称:

this['mystring'] = new Object();
this.mystring.title = 'mytitle';

如果你在课堂上这样做,那么这个课必须是动态的,以允许新成员:

dynamic public class MyClass extends MovieClip {
    public function MyClass() {
        this['mystring'] = new Object();
        this.mystring.title = 'mytitle';
    }
}

如果你的类不是动态的,你仍然可以这样做,但必须继续使用数组表示法而不是点符号:

public class MyClass extends MovieClip { // not dynamic
    public function MyClass() {
        this['mystring'] = new Object();
        this['mystring'].title = 'mytitle';
    }
}