Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Конкатенация строки и числа (http://www.flasher.ru/forum/showthread.php?t=215627)

art_maestro 09.07.2018 21:28

Конкатенация строки и числа
 
Здравствуйте.

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

В контейнер помещены блоки (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)));

Буду благодарен за помощь!

Wolsh 09.07.2018 21:36

Цитата:

Не удалось найти свойство blockundefined
говорит о том, что nk равно не 10 или 11, а undefined.

art_maestro 09.07.2018 21:38

Я понимаю суть ошибки. Но я не могу понять почему она возникает. И очень странно, что работает удаление от 0 до 9. А далее возникает ошибка, хотя nk выводит верно.

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

Код AS3:

trace(nk)//выводит 10
conteiner.removeChild(conteiner.getChildByName("block"+nk)); // ошибка  blockundefined

Может как-то надо преобразовать nk, но как?

Wolsh 09.07.2018 21:57

Странно, но у меня подобная конструкция даже ошибку выдает другую:
[Fault] exception, information=TypeError: Error #2007: Parameter child must be non-null.
То есть getChildByName() тупо возвращает null и никакого исключения не выкидывает.
Мало того, конкатенация строки с undefined преобразовывает его в ноль, то есть получается "block0".

art_maestro 09.07.2018 22:10

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

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

ZergMaster 09.07.2018 23:01

проверьте имя всех этих объектов, которые в контейнере
то ли оно, которое вы ожидаете?
Желательно поставить брэйкпойнт и посмотреть, что лежит в контейнере на момент, когда вы пытаетесь что-то из него удалить.
Если с бряками плохо, на крайняк можно и оттрэйсить:
Код 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));


art_maestro 09.07.2018 23:15

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

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

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

ZergMaster 10.07.2018 12:54

какие-то невероятные вещи..

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

Код 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))

;

СлаваRa 10.07.2018 13:36

Код AS3:

container.getChildByName(elementName) as DisplayObject;

Больше ненужных кастов богу кастов

art_maestro 10.07.2018 13:53

Спасибо,но я уже переделал код. На будущее буду иметь ввиду.


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

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