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

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

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

Регистрация: Mar 2013
Сообщений: 156
По умолчанию Конкатенация строки и числа

Здравствуйте.

Подскажите как решить такую задачу.

В контейнер помещены блоки (N-кол.во). Я пытаюсь удалить их из контейнера следующим образом
Код AS3:
conteiner.removeChild(conteiner.getChildByName("block"+nk));
Все работает, если nk=0..9. Если nk>9, то появляется ошибка:
Не удалось найти свойство blockundefined

Перед кодом удаления я вывожу отдельно nk (для контроля), все отображается верно 10 или 11 ( т.е. как нужно), но в процессе удаления возникает данная ошибка.

Пробовал следующие варианты:

Код AS3:
conteiner.removeChild(conteiner.getChildByName(String("block"+nk)));
conteiner.removeChild(conteiner.getChildByName("block11"));  // уже статически прописывал число ради интереса
conteiner.removeChild(conteiner.getChildByName(String("block11")));
conteiner.removeChild(conteiner.getChildByName("block"+String(nk)));
Буду благодарен за помощь!

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,437
Цитата:
Не удалось найти свойство blockundefined
говорит о том, что nk равно не 10 или 11, а undefined.
__________________
Reality.getBounds(this);

Старый 09.07.2018, 21:38
art_maestro вне форума Посмотреть профиль Отправить личное сообщение для art_maestro Найти все сообщения от art_maestro
  № 3  
Ответить с цитированием
art_maestro

Регистрация: Mar 2013
Сообщений: 156
Я понимаю суть ошибки. Но я не могу понять почему она возникает. И очень странно, что работает удаление от 0 до 9. А далее возникает ошибка, хотя nk выводит верно.

Я делаю вот так:

Код AS3:
trace(nk);   //выводит 10
conteiner.removeChild(conteiner.getChildByName("block"+nk)); // ошибка  blockundefined
Может как-то надо преобразовать nk, но как?

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,437
Странно, но у меня подобная конструкция даже ошибку выдает другую:
[Fault] exception, information=TypeError: Error #2007: Parameter child must be non-null.
То есть getChildByName() тупо возвращает null и никакого исключения не выкидывает.
Мало того, конкатенация строки с undefined преобразовывает его в ноль, то есть получается "block0".
__________________
Reality.getBounds(this);

Старый 09.07.2018, 22:10
art_maestro вне форума Посмотреть профиль Отправить личное сообщение для art_maestro Найти все сообщения от art_maestro
  № 5  
Ответить с цитированием
art_maestro

Регистрация: Mar 2013
Сообщений: 156
Что-то я еще больше озадачился. Наверное придется искать другой выход с данной ситуации. Просто уже ради любопытства.. почему возникает такая проблема.

Нашел на просторах интернета, что ошибка возникает, только при работе с динамически-созданными объектами.


Последний раз редактировалось art_maestro; 09.07.2018 в 22:26.
Старый 09.07.2018, 23:01
ZergMaster вне форума Посмотреть профиль Отправить личное сообщение для ZergMaster Найти все сообщения от ZergMaster
  № 6  
Ответить с цитированием
ZergMaster
 
Аватар для ZergMaster

Регистрация: May 2008
Адрес: Питер
Сообщений: 385
Отправить сообщение для ZergMaster с помощью ICQ Отправить сообщение для ZergMaster с помощью Skype™
проверьте имя всех этих объектов, которые в контейнере
то ли оно, которое вы ожидаете?
Желательно поставить брэйкпойнт и посмотреть, что лежит в контейнере на момент, когда вы пытаетесь что-то из него удалить.
Если с бряками плохо, на крайняк можно и оттрэйсить:
Код AS3:
for(var i:int=0; i<container.numChildren; i++) 
{
     trace('container.getChildAt('+i+').name = '+container.getChildAt(i).name);
}
Еще, чтобы исключить возможно undefined nk, можно сделать
Код AS3:
var name:String = "block"+nk;
trace('name = '+name);
container.removeChild(container.getChildByName(name));
__________________
while(live()) { hope(); }

Старый 09.07.2018, 23:15
art_maestro вне форума Посмотреть профиль Отправить личное сообщение для art_maestro Найти все сообщения от art_maestro
  № 7  
Ответить с цитированием
art_maestro

Регистрация: Mar 2013
Сообщений: 156
Спасибо за совет.
С помощью цикла я проверил, какие компоненты были добавлены в контейнер. Все отлично добавляется, вывело верно. Но ошибка все равно возникает.

Сейчас пытаюсь переделать код так, чтобы не использоваться собственные имена объектов "block"+nk - так как проблема именно в этом.

getChildByName(...) отлично работает с объектами, которым система автоматически присваивает имена ( instanceX)

Старый 10.07.2018, 12:54
ZergMaster вне форума Посмотреть профиль Отправить личное сообщение для ZergMaster Найти все сообщения от ZergMaster
  № 8  
Ответить с цитированием
ZergMaster
 
Аватар для ZergMaster

Регистрация: May 2008
Адрес: Питер
Сообщений: 385
Отправить сообщение для ZergMaster с помощью ICQ Отправить сообщение для ZergMaster с помощью Skype™
какие-то невероятные вещи..

интересно, а что в итоге выводит?

Код AS3:
var elementName:String = "block"+nk;
trace('elementName = '+elementName);
for(var i:int=0; i<container.numChildren; i++) {
     trace('container.getChildAt('+i+').name = '+container.getChildAt(i).name);
}
var someChild:DisplayObject = container.getChildByName(elementName) as DisplayObject;
trace('someChild = '+someChild);
container.removeChild(container.getChildByName(name))
;
__________________
while(live()) { hope(); }

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

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,099
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
Код AS3:
container.getChildByName(elementName) as DisplayObject;
Больше ненужных кастов богу кастов
__________________
местонахождение

Старый 10.07.2018, 13:53
art_maestro вне форума Посмотреть профиль Отправить личное сообщение для art_maestro Найти все сообщения от art_maestro
  № 10  
Ответить с цитированием
art_maestro

Регистрация: Mar 2013
Сообщений: 156
Спасибо,но я уже переделал код. На будущее буду иметь ввиду.

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

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

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


 


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


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