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

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

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

Регистрация: Aug 2011
Сообщений: 30
По умолчанию Получить доступ к переменной класса

Здравствуйте.
Имеется Flex Project в Adobe Flash Builder. Имеется собственный класс, задача которого формировать xml.
Код AS3:
public class UDPDatagram extends Sprite
	{
		public var xml:XML = new XML(<Messages>
				</Messages>);
         private function addXML()
		{
			xml.appendChild(
				<mess id={xmlCount} desc={messArr[0]}>
					<problem>{messArr[1]}</problem>
					<level>{messArr[2]}</level>
					<description>{messArr[3]}</description>
					<time>{now.toLocaleString()}</time>
					<mac>00:00:00:00:00:00</mac>
					<sensor>{messArr[10]}</sensor>
					<ssid>{ssid}</ssid>
				</mess>
		}
}
Класс соответственно представлен не полностью, но суть, я думаю, ясна.
Импортирую в проект package с классом так:
Код AS3:
<fx:Script>
	<![CDATA[
		import DatagramPack.UDPDatagram;
		public var myData:UDPDatagram = new UDPDatagram();
	]]>
</fx:Script>
Как мне теперь получить доступ к переменной xml класса UDPDatagram? Чтобы ее использовать или как DataProvider, или ещё где-нибудь? Через простое обращение myData.xml компилятор ругается и говорит, что не знает такого вообще.
И второе, не менее важное...
Данные поступают постоянно и соответственно xml в классе растет. Как отслеживать каждое его изменение? Полдня копался с [Bindable] и чего-то никак не заработает...
Спасибо.

Старый 01.09.2011, 18:37
Dimitry_II вне форума Посмотреть профиль Отправить личное сообщение для Dimitry_II Найти все сообщения от Dimitry_II
  № 2  
Ответить с цитированием
Dimitry_II

Регистрация: Jan 2010
Сообщений: 211
Делай приватной переменную _xml, а xml объявляй как геттер/сеттер.
По-моему, если ты сделаешь Bindable _xml, то сможешь и отслеживать.

Старый 01.09.2011, 19:12
maljavka вне форума Посмотреть профиль Отправить личное сообщение для maljavka Найти все сообщения от maljavka
  № 3  
Ответить с цитированием
maljavka

Регистрация: Aug 2011
Сообщений: 30
Пробовал так. Получается та же самая ошибка. Да и насколько понимаю геттер/сеттер равносилен публичной переменной. Делается для предоставления доступа к закрытым переменным или методам класса.

Старый 01.09.2011, 23:29
Dimitry_II вне форума Посмотреть профиль Отправить личное сообщение для Dimitry_II Найти все сообщения от Dimitry_II
  № 4  
Ответить с цитированием
Dimitry_II

Регистрация: Jan 2010
Сообщений: 211
Что-то мне кажется, что ты где-то дал маху. Или обращаешься к переменной ДО ее инициализации.
Во-первых, хотелось бы видеть ошибку, а во-вторых, кода бы побольше.

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

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Цитата:
Код AS3:
<mess id={xmlCount} desc={messArr[0]}>
					<problem>{messArr[1]}</problem>
					<level>{messArr[2]}</level>
					<description>{messArr[3]}</description>
					<time>{now.toLocaleString()}</time>
					<mac>00:00:00:00:00:00</mac>
					<sensor>{messArr[10]}</sensor>
					<ssid>{ssid}</ssid>
				</mess>
А такое работает?
Что вам компилятор то говорит?

myData.xml - ок так можно обращаться в вашем случае

Добавлено через 1 минуту
Зачем вы хмл за основу взяли? Чем вас Array(Collection) с объектами не устраивает?

Старый 02.09.2011, 09:00
maljavka вне форума Посмотреть профиль Отправить личное сообщение для maljavka Найти все сообщения от maljavka
  № 6  
Ответить с цитированием
maljavka

Регистрация: Aug 2011
Сообщений: 30
Цитата:
Что-то мне кажется, что ты где-то дал маху. Или обращаешься к переменной ДО ее инициализации.
Во-первых, хотелось бы видеть ошибку, а во-вторых, кода бы побольше.
Обращение к переменной происходит сразу после объявления экземпляра класса.
Ошибку выложу через час, как буду на работе. И там не ошибка, а Warning, который в процессе компиляции и запуска программы приводит к ошибке.
Цитата:
Зачем вы хмл за основу взяли? Чем вас Array(Collection) с объектами не устраивает?
Потому что надо XML файл в итоге отдавать, который пишется потом через filestream. Его удобнее парсить.
Цитата:
А такое работает?
А чему тут не работать, если переменные заранее проинициализированы =) Я ж написал, что это просто кусок класса.

Добавлено через 1 час 19 минут
Такс. Обращение к переменной:
Код AS3:
<fx:Script>
	<![CDATA[
		import DatagramPack.UDPDatagram;
		var myData:UDPDatagram = new UDPDatagram();
		trace(myData.xml);
	]]>
Ошибка:
1120: Access of undefined property myData. Datagram.mxml /Datagram/src line 9 Flex Problem

Если переменную указывать как DataProvider в ComboBox, например (а там переменная указывается в кавычках), то выдается warning, что возможно такой переменной нет и ошибка выдается уже в процессе выполнения программы.

Добавлено через 2 часа 58 минут
Я чего-то совсем ничего не понимаю как там это работает...
Потыкался потыкался и получился вот такой код:
Код AS3:
<fx:Script>
	<![CDATA[
		import DatagramPack.UDPDatagram;
		private var mydata:UDPDatagram;
		var i:int = 0;
		private function proverka():void
		{
			if(i==0)
			{
				mydata = new UDPDatagram();
				i++;
			}
			trace("Проверка");
			trace(mydata.xml);
		}
 
	]]>
</fx:Script>
	<s:Button x="105" y="71" label="Button" click="proverka()"/>
Соответственно при каждом нажатии кнопки у меня делается обращение к переменной класса через геттер и я получаю результат. Но стоит мне вынести mydata = new UDPDatagram(); за границы функции, то он ругается на эту строчку, типа не знает что такое mydata. В чем проблема? Никак не пойму.


Последний раз редактировалось maljavka; 02.09.2011 в 10:21.
Старый 02.09.2011, 13:25
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 7  
Ответить с цитированием
GBee
 
Аватар для GBee

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

Старый 02.09.2011, 14:21
maljavka вне форума Посмотреть профиль Отправить личное сообщение для maljavka Найти все сообщения от maljavka
  № 8  
Ответить с цитированием
maljavka

Регистрация: Aug 2011
Сообщений: 30
Цитата:
Сообщение от GBee Посмотреть сообщение
Фигурные скобки? это же не MXML. Я не уверен, но работать такое не должно.
Работает это в AS3. Методика записи нагло спёрта из книги Колина Мука про AS. В AS3 специальные теги записи XML.

Добавлено через 35 минут
Ну ладно. С первым вопросом я вроде разобрался что почем.
Теперь второй вопрос. Как мне следить за переменной класса, чтобы знать, что в XML что-то добавилось?
Я сделал так:
Код AS3:
		[Bindable(event="xmlChange")]
		public function get xml():XML
		{
			return _xml;
		}
 
		public function set xml(value:XML):void
		{
			if( _xml !== value)
			{
				_xml = value;
				dispatchEvent(new Event("xmlChange"));
			}
		}
Это в теле класса.
И соответственно в теле самой программы
Код AS3:
addEventListener("xmlChange", proverka);
Но функция proverka() не запускается. В чем проблема? потому что разнесены отправка сообщения и слушатель? Если да, то как можно сделать по-другому?
Спасибо

Старый 02.09.2011, 15:41
Dimitry_II вне форума Посмотреть профиль Отправить личное сообщение для Dimitry_II Найти все сообщения от Dimitry_II
  № 9  
Ответить с цитированием
Dimitry_II

Регистрация: Jan 2010
Сообщений: 211
Код AS3:
myData.addEventListener("xmlChange", proverka);
А что касается первого вопроса, то таки да - обращение к полю идет до инициализации. Читай ее в хандлере creationComplete родителя.

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

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

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


 


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


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