строка с именем экземпляра в сценарии действия 3 - PullRequest
1 голос
/ 25 февраля 2010

У меня проблемы с 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 в частности, я действительно не знаю, что я делаю здесь неправильно. Я пытаюсь установить текст для ev1.title1, ev2.title2 и т. Д. Из значений в eventChildren следующим образом: первый дочерний элемент, устанавливает ev1.title1, второй ev2.title2 и так далее. Любые идеи о том, что я должен изменить в коде или где искать информацию?

edit: спасибо за помощь, оба ответа привели меня к правильному решению:

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 ]

2 голосов
/ 25 февраля 2010

Вы можете создать имя переменной, используя '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';
    }
}
2 голосов
/ 25 февраля 2010

ev и titl равны Strings, а не Object, в as3 нет eval, поэтому вы не сможете создать новую переменную на основе имени строки .Но вы можете создать новый Object, который будет иметь поле на основе вашей строки ev:

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

Таким образом, если ev равно строке "ev1", у вас будет объект с полем с именем ev1 => o.ev1 = ...

Для заголовка вы можете сделать то же самое, создав новый объект, который будет иметь поле на основе строки заголовка:

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

Так что, если titl равен строке "title1", у вас будет объект с полем с именем title1 => o.title1 = ...

То же самое для текста, вы должны создать объект для хранения текстового поля.

Смешивая всю эту информацию, вы получите:

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)

См. Также вопрос для обозначения объекта

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...