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

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

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

Регистрация: May 2011
Сообщений: 26
По умолчанию Доступ к свойству компонента вне основного класса.

Flex очень простой и понятный фреймворк, но найти информацию про некоторые особенности бывает нереально.

Столкнулся с проблемой доступа к свойству mxml компонента из основного класса приложения. Когда компонент в главном mxml - проблем нет. Доступ к его свойствам через id. Но у меня есть в проекте папочка components , а в ней mxml файлы.

Код AS1/AS2:
components.component.mylabel.text
не работает

Код AS1/AS2:
c:components.component = new components.component;
c.mylabel.text
не подходит, потому что создаётся новый пустой элемент, а мне нужен тот, который уже существует

Подскажите пожалуйста возможно есть простой способ получать доступ к переменным других классов-компонентов ?

Старый 21.06.2011, 11:32
Lexxx_HU вне форума Посмотреть профиль Отправить личное сообщение для Lexxx_HU Найти все сообщения от Lexxx_HU
  № 2  
Ответить с цитированием
Lexxx_HU

Регистрация: Oct 2010
Сообщений: 67
если я правильно вас понял то должно помочь это -
Код AS3:
FlexGlobals.topLevelApplication.

Старый 21.06.2011, 15:54
cheluskin вне форума Посмотреть профиль Отправить личное сообщение для cheluskin Найти все сообщения от cheluskin
  № 3  
Ответить с цитированием
cheluskin

Регистрация: May 2011
Сообщений: 26
Цитата:
Сообщение от Lexxx_HU Посмотреть сообщение
если я правильно вас понял то должно помочь это -
Код AS3:
FlexGlobals.topLevelApplication.
Спасибо, я сам так думал, но или я не понимаю механизм работы этого конструктора, или он не предназначен для доступа к классам расположенным в других папках

пробовал
Код AS1/AS2:
FlexGlobals.topLevelApplication.components.component.mylabelid.text
получил
Код AS1/AS2:
Error #1069: Property components not found on Main and there is no default value.

Не понимаю я этих адобовских разработчиков. Почему не сделать простой и интуитивный доступ к свойствам через точку. Возможным решением этой проблемы могло стать пространство имён, т.е. принудительно запихнуть xmlns:local="components.*" в основной mxml , но как оно работает это пространство имён в CDATA - это тоже тайна за семью печатями, потому что после добавления этой строки переменные компонентов в папке всё равно не доступны локально.


Последний раз редактировалось cheluskin; 21.06.2011 в 16:01.
Старый 21.06.2011, 15:58
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 4  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Класс с эксземпляром класса не путаете?
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 21.06.2011, 16:07
cheluskin вне форума Посмотреть профиль Отправить личное сообщение для cheluskin Найти все сообщения от cheluskin
  № 5  
Ответить с цитированием
cheluskin

Регистрация: May 2011
Сообщений: 26
Цитата:
Сообщение от GBee Посмотреть сообщение
Класс с эксземпляром класса не путаете?
у меня есть папка в проекте с названием components там лежат mxml файлы, я их тоже считаю классами, потому что в конечном итоге компилятор их переводит в классы. Но достать их из Main.mxml оказалось нетривиальной задачей. Я легко получаю новый экземпляр класса через new, но нафиг он мне нужен с пустыми дефолтными значениями переменных, я хочу получить тот, который у меня сейчас.

Всё таки наверное я неправильно использую FlexGlobals.topLevelApplication, ибо он прекрасно работает, когда нужно из другого mxml получить свойство Maim.mxml, а если наоборот - нет. И это вполне можно понять.
Когда я пишу
Код AS1/AS2:
FlexGlobals.topLevelApplication.components.component.mylabelid.text
интерпретатор ищет в Main.mxml компонент с названием components, а его там нет. Решение как всегда рядом, но учитывая что моменты взамодействия mxml из разных мест вообще не описаны в документации, в гугле запрос "call to another mxml" - это высокочастотник. Отдельного упоминания заслуживают мнения экспертов, которые рекомендуют не использовать логику в самих компонентах и ни одного реального ответа !


Последний раз редактировалось cheluskin; 21.06.2011 в 16:28.
Старый 21.06.2011, 16:53
fljot вне форума Посмотреть профиль Отправить личное сообщение для fljot Найти все сообщения от fljot
  № 6  
Ответить с цитированием
fljot

блогер
Регистрация: Jul 2007
Сообщений: 940
Записей в блоге: 3
GBee дал вполне реальный ответ-вопрос.

Цитата:
Сообщение от cheluskin Посмотреть сообщение
Когда компонент в главном mxml - проблем нет. Доступ к его свойствам через id. Но у меня есть в проекте папочка components , а в ней mxml файлы.
В папочке или нет — не важно. Папочка — это пакет (package) в данном случае. Пакеты служат от организации и разделения классов. Вам же стоит искать способ достучаться до экземпляров.

Старый 21.06.2011, 17:30
cheluskin вне форума Посмотреть профиль Отправить личное сообщение для cheluskin Найти все сообщения от cheluskin
  № 7  
Ответить с цитированием
cheluskin

Регистрация: May 2011
Сообщений: 26
Цитата:
Сообщение от fljot Посмотреть сообщение
GBee дал вполне реальный ответ-вопрос.


В папочке или нет — не важно. Папочка — это пакет (package) в данном случае. Пакеты служат от организации и разделения классов. Вам же стоит искать способ достучаться до экземпляров.
Если экземпляр класса - это то, что я получаю через new, тогда мне он не нужен. Потому что он создаётся со значениями по дефолту, а не теми которые в данный момент.


Неужели никто никогда не создавал компоненты и не использовал логику для взаимодействия ? Перерыл кучу примеров проектов с компонентами от adobe и во всех они этого никогда не делают. Это что невозможно ?


Последний раз редактировалось cheluskin; 21.06.2011 в 17:33.
Старый 21.06.2011, 18:01
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 8  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Чтобы работать с компонентом его надо создать.

Цитата:
Когда компонент в главном mxml - проблем нет. Доступ к его свойствам через id.
Потому что в главном мхмл вы описали как он создастся и с какими параметрами.

грубо говоря
Код AS3:
<ns:Comp param1="1" param2="2" id="c"/>
равно
Код AS3:
var c:Comp = new Comp();
c.param1 = 1;
c.param2 = 2;
addChild(c);
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 21.06.2011, 18:06
cheluskin вне форума Посмотреть профиль Отправить личное сообщение для cheluskin Найти все сообщения от cheluskin
  № 9  
Ответить с цитированием
cheluskin

Регистрация: May 2011
Сообщений: 26
Цитата:
Сообщение от GBee Посмотреть сообщение
Чтобы работать с компонентом его надо создать.


Потому что в главном мхмл вы описали как он создастся и с какими параметрами.

грубо говоря
Код AS3:
<ns:Comp param1="1" param2="2" id="c"/>
равно
Код AS3:
var c:Comp = new Comp();
c.param1 = 1;
c.param2 = 2;
addChild(c);
Хорошо, а если предположить, что компонент уже создан и описан в mxml и лежит в пакете. Как до него достучаться ? Причём нужно получать текущие его свойства.

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

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Цитата:
Хорошо, а если предположить, что компонент уже создан и описан в mxml и лежит в пакете. Как до него достучаться ? Причём нужно получать текущие его свойства.
Вы опять все в кучу смешали. Что такое текущие свойства в вашем понимании? Если объект уже создан, то через ссылку на него можно менять его свойства, если они public. Основы ООП.

Может представите кусочек кода с пояснениями, чего вы хотите. Без теории, чисто практика и желания?
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

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

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

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


 


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


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