Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 24.08.2012, 01:43
ramarama вне форума Посмотреть профиль Отправить личное сообщение для ramarama Найти все сообщения от ramarama
  № 1  
Ответить с цитированием
ramarama

Регистрация: Feb 2012
Сообщений: 19
По умолчанию Циклическое создание 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 минуты
Видно сложную я задачу задал и себе и остальным...

Старый 24.08.2012, 03:57
MINASTIS вне форума Посмотреть профиль Отправить личное сообщение для MINASTIS Посетить домашнюю страницу MINASTIS Найти все сообщения от MINASTIS
  № 2  
Ответить с цитированием
MINASTIS
 
Аватар для MINASTIS

Регистрация: Jan 2006
Адрес: Сургут
Сообщений: 897
Отправить сообщение для MINASTIS с помощью Skype™
Не понимаю, в чем проблема? Вам хочется, чтобы переменная называлась "text_level+i"?

Старый 24.08.2012, 07:24
Isfet вне форума Посмотреть профиль Отправить личное сообщение для Isfet Найти все сообщения от Isfet
  № 3  
Ответить с цитированием
Isfet

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
зачем вам у экземпляров текстфилда такие названия?? если вам нужно чтобы тексфилд хранил его порядковый номер из хмл, создайте класс наследуемый от текстфилд, создайте в нем переменную и записывайте туда номер
Код 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);
}
примерно так


Последний раз редактировалось Isfet; 24.08.2012 в 07:45.
Старый 24.08.2012, 14:18
ramarama вне форума Посмотреть профиль Отправить личное сообщение для ramarama Найти все сообщения от ramarama
  № 4  
Ответить с цитированием
ramarama

Регистрация: Feb 2012
Сообщений: 19
Добавлено через 30 секунд
Цитата:
Сообщение от MINASTIS Посмотреть сообщение
Не понимаю, в чем проблема? Вам хочется, чтобы переменная называлась "text_level+i"?
Именно

Старый 24.08.2012, 14:26
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 5  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Для этого нужно сделать класс, в котором создается текстовое поле динамическим.
Код AS3:
package {
         public dynamic class SomeClass extends Sprite {
               public function SomeClass() {
                    for (var i:int = 0; i < 10; i++) {
                            this['textField' + i] = new TextField();
                    }
               }
         }
}
Если класс не динамический, создать динамическое имя переменной не получится.

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

Старый 24.08.2012, 14:43
ramarama вне форума Посмотреть профиль Отправить личное сообщение для ramarama Найти все сообщения от ramarama
  № 6  
Ответить с цитированием
ramarama

Регистрация: Feb 2012
Сообщений: 19
Запихнуть все названия будущих переменных в массив, а потом обращаться к нужному элементу массива?

Старый 24.08.2012, 14:45
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 7  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
нет, сразу создавать текстовые поля и засовывать их массив

Старый 24.08.2012, 21:05
ramarama вне форума Посмотреть профиль Отправить личное сообщение для ramarama Найти все сообщения от ramarama
  № 8  
Ответить с цитированием
ramarama

Регистрация: Feb 2012
Сообщений: 19
А вот здесь не понял. Просто такими операциями с массивами я не занимался =(

Старый 24.08.2012, 21:11
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 9  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Код AS3:
var textFields:Array = []; // создаем массив для текстовых полей
for (var i:int = 0; i < 10; i++) {
       var tf:TextField = new TextField();
       textFields.push(tf); // создаем текстовые поля в цикле и сразу помещаем в масси
}
 
trace(textFields[3]); // обращаемся к 4 текстовому полю в массиве

Старый 24.08.2012, 21:35
ramarama вне форума Посмотреть профиль Отправить личное сообщение для ramarama Найти все сообщения от ramarama
  № 10  
Ответить с цитированием
ramarama

Регистрация: Feb 2012
Сообщений: 19
А если будет обращения сразу ко всем текстовым полям? Ведь имена всех будут одинаковыми, судя из этого кода. Я так понимаю, что необходимо создавать TextField’ы, используя одну стоку из Вашего кода
Код AS3:
this['textField' + i] = new TextField();

Создать новую тему Ответ Часовой пояс GMT +4, время: 02:44.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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