Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Циклическое создание TextField (http://www.flasher.ru/forum/showthread.php?t=183516)

ramarama 24.08.2012 01:43

Циклическое создание TextField
 
Имеется xml-файл, с которого вытягивается информация и заносится в соответствующие поля. Количество дочерных элементов не фиксированное, поэтому приходится запускать цикл с числом шагов равно длине xml.

Тестовые поля создаются посредством TextField() (далее операции с ним описывать не буду - все покажу в коде) и заполняются данными.

Вот часть кода, где происходит заполнение поля:

Код AS3:

function completeListener(e:Event):void
{
        extendensXML = new XML(urlLoader.data);
        trace("Загрузка данных успешно завершена!");
 
        var text_level:TextField = new TextField();
        text_level.x = xx;
        text_level.y = yy;
        text_level.width = 200;
        text_level.height = 50;
        addChild(text_level);
        text_level.text = extendensXML.item[0].level;
 
        //и еще несколько однотипных полей
 
 
        //начало цикла вывода данных с XML-файла и заполнение полей
        for (var i:int = 0; i < extendensXML.*.length(); i++)
        {
 
        var text_level + "i":TextField = new TextField(); // рядом с переменной должен появляться индекс номера записи и создаваться текстовое поле с одноименным названием;
        text_level.x = xx;
        text_level.y = yy;
        text_level.width = 200;
        text_level.height = 50;
        addChild(text_level);
        text_level.text = extendensXML.item[i].level;
 
 
 
        }
 
}

Вот в цикле и начинается проблема - необходимо создавать текстовые поля с порядковыми числами номером строк. Прикрутить никак не придумаю. Честно, нужна Ваша помощь.

Добавлено через 22 минуты
Видно сложную я задачу задал и себе и остальным...

MINASTIS 24.08.2012 03:57

Не понимаю, в чем проблема? Вам хочется, чтобы переменная называлась "text_level+i"?

Isfet 24.08.2012 07:24

зачем вам у экземпляров текстфилда такие названия?? если вам нужно чтобы тексфилд хранил его порядковый номер из хмл, создайте класс наследуемый от текстфилд, создайте в нем переменную и записывайте туда номер
Код AS3:

package {
 
      public class TextLevel extends TextField{
 
                private var num:int;
 
            public function TextLevel(posX:Number,posY:Number,inputText:String) {
                      this.x = posX;
                      this.y = posY;
                      this.width = 200;
                      this.height = 50;
                      this.text = inputText;
          }
            public function setNumber(num:int) {
                        this.num = num;
            }
    }
}

а в цикле пишите
Код AS3:

for (var i:int = 0; i < extendensXML.*.length(); i++){
 
          var inputText:String = extendensXML.item[i].level;
 
        var text_level :TextLevel = new TextLevel(xx,yy,inputText);
          text_level.setNumber(i);//можно в конструктор передавать сразу
 
        addChild(text_level);
}

примерно так

ramarama 24.08.2012 14:18

Добавлено через 30 секунд
Цитата:

Сообщение от MINASTIS (Сообщение 1093578)
Не понимаю, в чем проблема? Вам хочется, чтобы переменная называлась "text_level+i"?

Именно

caseyryan 24.08.2012 14:26

Для этого нужно сделать класс, в котором создается текстовое поле динамическим.
Код AS3:

package {
        public dynamic class SomeClass extends Sprite {
              public function SomeClass() {
                    for (var i:int = 0; i < 10; i++) {
                            this['textField' + i] = new TextField();
                    }
              }
        }
}

Если класс не динамический, создать динамическое имя переменной не получится.

Хотя я вообще не понимаю зачем это нужно. Такие вещи обычно делаются с помощью массивов

ramarama 24.08.2012 14:43

Запихнуть все названия будущих переменных в массив, а потом обращаться к нужному элементу массива?

caseyryan 24.08.2012 14:45

нет, сразу создавать текстовые поля и засовывать их массив

ramarama 24.08.2012 21:05

А вот здесь не понял. Просто такими операциями с массивами я не занимался =(

caseyryan 24.08.2012 21:11

Код AS3:

var textFields:Array = []; // создаем массив для текстовых полей
for (var i:int = 0; i < 10; i++) {
      var tf:TextField = new TextField();
      textFields.push(tf); // создаем текстовые поля в цикле и сразу помещаем в масси
}
 
trace(textFields[3]); // обращаемся к 4 текстовому полю в массиве


ramarama 24.08.2012 21:35

А если будет обращения сразу ко всем текстовым полям? Ведь имена всех будут одинаковыми, судя из этого кода. Я так понимаю, что необходимо создавать TextField’ы, используя одну стоку из Вашего кода
Код AS3:

this['textField' + i] = new TextField();



Часовой пояс GMT +4, время: 04:10.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.