我遇到了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;
答案 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';
}
}