|
|
|||||
Регистрация: Mar 2013
Сообщений: 157
|
Конкатенация строки и числа
Здравствуйте.
Подскажите как решить такую задачу. В контейнер помещены блоки (N-кол.во). Я пытаюсь удалить их из контейнера следующим образом Все работает, если nk=0..9. Если nk>9, то появляется ошибка: Не удалось найти свойство blockundefined Перед кодом удаления я вывожу отдельно nk (для контроля), все отображается верно 10 или 11 ( т.е. как нужно), но в процессе удаления возникает данная ошибка. Пробовал следующие варианты: 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))); |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Цитата:
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Mar 2013
Сообщений: 157
|
Я понимаю суть ошибки. Но я не могу понять почему она возникает. И очень странно, что работает удаление от 0 до 9. А далее возникает ошибка, хотя nk выводит верно.
Я делаю вот так: Может как-то надо преобразовать nk, но как? |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Странно, но у меня подобная конструкция даже ошибку выдает другую:
[Fault] exception, information=TypeError: Error #2007: Parameter child must be non-null. То есть getChildByName() тупо возвращает null и никакого исключения не выкидывает. Мало того, конкатенация строки с undefined преобразовывает его в ноль, то есть получается "block0".
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Mar 2013
Сообщений: 157
|
Что-то я еще больше озадачился. Наверное придется искать другой выход с данной ситуации. Просто уже ради любопытства.. почему возникает такая проблема.
Нашел на просторах интернета, что ошибка возникает, только при работе с динамически-созданными объектами. Последний раз редактировалось art_maestro; 09.07.2018 в 22:26. |
|
|||||
проверьте имя всех этих объектов, которые в контейнере
то ли оно, которое вы ожидаете? Желательно поставить брэйкпойнт и посмотреть, что лежит в контейнере на момент, когда вы пытаетесь что-то из него удалить. Если с бряками плохо, на крайняк можно и оттрэйсить: for(var i:int=0; i<container.numChildren; i++) { trace('container.getChildAt('+i+').name = '+container.getChildAt(i).name); }
__________________
while(live()) { hope(); } |
|
|||||
Регистрация: Mar 2013
Сообщений: 157
|
Спасибо за совет.
С помощью цикла я проверил, какие компоненты были добавлены в контейнер. Все отлично добавляется, вывело верно. Но ошибка все равно возникает. Сейчас пытаюсь переделать код так, чтобы не использоваться собственные имена объектов "block"+nk - так как проблема именно в этом. getChildByName(...) отлично работает с объектами, которым система автоматически присваивает имена ( instanceX) |
|
|||||
какие-то невероятные вещи..
интересно, а что в итоге выводит? 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(); } |
|
|||||
__________________
местонахождение |
|
|||||
Регистрация: Mar 2013
Сообщений: 157
|
Спасибо,но я уже переделал код. На будущее буду иметь ввиду.
|
Часовой пояс GMT +4, время: 21:32. |
|
« Предыдущая тема | Следующая тема » |
|
|