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

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

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

Регистрация: Mar 2013
Сообщений: 290
По умолчанию Выражение для TextFiled + getChildbyName

В списке отображения есть мувиклип container.
В нем расположено текстовое поле tf1_dtx (прописано в свойстве Instance name).

Теперь, если в программе использовать выражение, навроде:

Код AS3:
container.getChildByName("tf1_dtx").text = "Teargas";
То возникает ошибка:
Цитата:
1119: Access of possibly undefined property text through a reference with static type flash.display:DisplayObject.
Правильно ли я понимаю, что причина в отсутствии у DisplayObject свойства text?

Если так, то должно было бы сработать выражение, навроде:
Код AS3:
container.(getChildByName("tf1_dtx") as TextField).text = "Teargas";
Но в этом случае получаем ошибку:
Цитата:
TypeError: Error #1123: Filter operator not supported on type Container.
Здесть вообще непонятно, фильтровые операторы какие-то, ужас-ужас.

Если теперь передеть во так, то вроде работает:
Код AS3:
var tempTf:TextField;
tempTf = container.getChildByName("tf1_dtx") as TextField;
tempTf.text = "Teargas";
Но это лишняя переменная и две строки, но похоже иначе нельзя?

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

Регистрация: Jul 2013
Адрес: Днепр
Сообщений: 529
Отправить сообщение для alexandrratush с помощью ICQ Отправить сообщение для alexandrratush с помощью Skype™
Вот так попробуйте написать:
Код AS3:
(container.getChildByName("tf1_dtx") as TextField).text = "Teargas";

Старый 30.01.2014, 14:00
Fogflasher вне форума Посмотреть профиль Отправить личное сообщение для Fogflasher Найти все сообщения от Fogflasher
  № 3  
Ответить с цитированием
Fogflasher

Регистрация: Mar 2013
Сообщений: 290
Цитата:
Вот так попробуйте написать:
Да, так работает, спасибо.

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
Но это лишняя переменная и две строки
Вы распечатываете код на принтере и жалеете леса?
Это стремление написать весь код в одну строчку не имеет никаких оснований. Зато читать его возвратно-поступательным движением глаз и нейронов, подсчитывая и сопоставляя скобочки — совершенно не комильфо. Кроме того, выделение в переменную позволяет работать с ней и дальше. Если завтра Вы захотите еще и текстФормат поменять, снова будете писать эту конструкцию из скобок и заставлять плеер шуршать по списку отображения?
Код AS3:
var tempTf:TextField = container.getChildByName("tf1_dtx") as TextField;
tempTf.text = "Teargas";
__________________
Reality.getBounds(this);

Старый 30.01.2014, 16:10
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 5  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Wolsh и другие , я извиняюсь, но мне дико интересно, когда вообще на практике люди находят использование метода getChildByName. C чем бы я не работал с swc или swf - ассеты , как бы криво программу не писал, но на практике ни разу в жизни не использовал getChildByName. Так вот, откуда у людей оно вылезает то?

Добавлено через 1 минуту
П.с. вот даже я смотрю задачу ТС. Он пишет

Цитата:
В списке отображения есть мувиклип container.
В нем расположено текстовое поле tf1_dtx (прописано в свойстве Instance name).
container.tf1_dtx.text = "lalala" - вот я так напишу и не увижу экспешна, если там действитльно есть такой текстфайлд, посему мне непонятна эта практика
__________________
Марк Tween

Старый 30.01.2014, 16:19
Fogflasher вне форума Посмотреть профиль Отправить личное сообщение для Fogflasher Найти все сообщения от Fogflasher
  № 6  
Ответить с цитированием
Fogflasher

Регистрация: Mar 2013
Сообщений: 290
Цитата:
Это стремление написать весь код в одну строчку не имеет никаких оснований.
Хотелось также, в образовательных целях, хотелось узнать почему со скобочкой вариант не сработал.

А вообще, это упрощенный пример, а на самом деле там двухмерный массив из текстфилдов, и вложенных контейнеров больше, и на некотором этапе мне было проще использовать одну строку, без ввода дополнительных переменных.

Но вот сейчас сделал более оптимальный вариант, через вложенные циклы, и да, так лучше, конешно.

Старый 30.01.2014, 16:28
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 7  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
in4core я когда-то, в эпоху "универсальности" и "правильности", пытался тоже использовать. Но это прошло и теперь мне больше понятны слова "конкретная задача"

Старый 30.01.2014, 17:24
Fogflasher вне форума Посмотреть профиль Отправить личное сообщение для Fogflasher Найти все сообщения от Fogflasher
  № 8  
Ответить с цитированием
Fogflasher

Регистрация: Mar 2013
Сообщений: 290
in4core, ну вот допустим у меня есть таблица (нарисованная во Flash IDE, и добавленная в библиотеку, в ней всякие контэйнеры, текстфилды, имеющие названия) и в ней 45 ячеек. Мне нужно вывести в эти ячейки некие числа из массива, а потом подсветить отдельные числа по некоторому условию.

И вот я думаю, как мне, нубу, это сделать? И прихожу к такой концепции (она встречалась у Феронато и еще где-то видел):
во вложенном цикле сгенерировать переменную типа String, например: currentCell = "cell" + String(i) + "_" + String(k);
И потом через getChildByName можно напрямую обращаться к любой ячейке, хоть в цикле, хоть непосредственно.

Я понимаю, наверное это не самый грамотный подход, но... а как еще можно? Как например вы делаете таблицы данных во Flash?
Может какой-то компонент есть стандартный, который всесторонне хорош, или свои наработки?

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
Хотелось также, в образовательных целях, хотелось узнать почему со скобочкой вариант не сработал.
Именно потому, что мозг путается в скобочках. Их трудно читать, поэтому Вы и пишете их неправильно
Код AS3:
container.(getChildByName("tf1_dtx") as TextField).text = "Teargas";
Вы поставили первую скобку после оператора точка. Вы должны были вызвать метод getChildByName() у объекта container. Скобка отрезала одно от другого. То, что в скобках — отдельное самостоятельное выражение. У кого Вы вызываете getChildByName()? По контексту — у this, а не у контейнера. Далее — то, что после container. должно быть свойством или методом объекта container. Ссылкой на текстфилд было бы container.textField, а у Вас уже само выражение textField (то есть то, что в скобках) — готовая самостоятельная ссылка на текстфилд. Вы запутались в скобках еще когда писали код. Каково же его читать через пару месяцев?

in4core, мне не обязательно делать так же, как спрашивающий, чтобы ответить. И у меня не всегда есть желание и силы убеждать спрашивающего делать все по-другому, особенно не зная его задачи в полном объеме.
__________________
Reality.getBounds(this);

Старый 30.01.2014, 19:01
myakushka вне форума Посмотреть профиль Отправить личное сообщение для myakushka Найти все сообщения от myakushka
  № 10  
Ответить с цитированием
myakushka

Регистрация: Jan 2014
Адрес: Россия, Саратов
Сообщений: 28
динамически скобки ([fieldName]) вроде могут заменить вызов метода .getChildByName(fieldName)

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

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

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


 


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


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