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

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

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

Регистрация: May 2007
Адрес: Moscow
Сообщений: 263
2 _etc: Представление об интерфейсах крайне расплывчто, в чем честно и признался в начале топика.
2 wvxvw: Спасибо за разъяснение. Я считал, что в интерфейс вшиваются методы целиком, а не только их заголовки и что интерфейс является неким подобием класса не создающего, при вызове, объекта - поэтому и вызывал функции таким образом.
-----------------------
Код переделал - все-равно не фурычит.

***IDynamicPropertyOutput->writeDynamicProperty***
Adds a dynamic property to the binary output of a serialized object. When the object is subsequently read (using a method such as readObject), it contains the new property. You can use this method to exclude properties of dynamic objects from serialization; to write values to properties of dynamic objects; or to create new properties for dynamic objects.

***IDynamicPropertyWriter->writeDynamicProperties***
This interface is used with the IDynamicPropertyOutput interface to control the serialization of dynamic properties of dynamic objects. To use this interface, assign an object that implements the IDynamicPropertyWriter interface to the ObjectEncoding.dynamicPropertyWriter property.

***ObjectEncoding.dynamicPropertyWriter***
You can use this property to exclude properties of dynamic objects from serialization; to write values to properties of dynamic objects; or to create new properties for dynamic objects. To do so, set this property to an object that implements the IDynamicPropertyWriter interface.


Как я это понял:
1.Класс исходного объекта должен включать интерфейс IDPWriter;
2.Класс клона должен включать интерфейс IDPOutput;
3.Должна быть прописана ссылка "ObjectEncoding.dynamicPropertyWriter" на класс исходного объекта - тогда при запуске метода WriteObject() произойдет перенос динамических свойств в ByteArray, а при вызове метода ReadObject(), их считывание.

Как реализовал:
в кадре:
Код:
var ba:ByteArray;
var o1:MyObject=new MyObject();

ba=new ByteArray();
ba.writeObject(o1);
trace("Размер1: "+ba.length);		//Размер1: 27

ba=new ByteArray();
ObjectEncoding.dynamicPropertyWriter=o1;
ba.writeObject(o1);
					//func1 вызвана
trace("Размер2: "+ba.length);		//Размер2: 58
ba.position=0;

//***дальше ошибка...***
var o2:MyClone=ba.readObject() as MyClone;
trace(o2);
trace(o1.prop1+"  /  "+o2.prop1);
trace(o1.prop2+"  /  "+o2.prop2);
trace(o1.prop3+"  /  "+o2.prop3);
MyObject.as
Код:
package {
import flash.net.*
	public dynamic class MyObject implements IDynamicPropertyWriter{
		
		public function writeDynamicProperties(obj:Object, output:IDynamicPropertyOutput):void {
			trace("func1 вызвана")
			output.writeDynamicProperty("prop1","another very-very-very-very long string")
			output.writeDynamicProperty("prop3",obj.prop3)
		}
		
		public function MyObject(){
			this.prop1=12345;
			this.prop2="string";
			this.prop3=someFunc;
		}
		
		public function someFunc():void{}

	}
}
MyClone.as
Код:
package {
import flash.net.*
	public dynamic class MyClone implements IDynamicPropertyOutput{

		public function writeDynamicProperty(name:String, value:*):void {
			trace("func2")
			this[name]=value;
		}
		
		public function MyClone(){
		}
		
	}
}
В сухом остатке:
Свойства попадают в ByteArray при вызове метода WriteObject(), но не вытаскиваются из него при вызове ReadObject()

Подскажите пжл: как надо перестроить код чтобы он нормально заработал?
__________________
А я Томат.


Последний раз редактировалось Torero; 16.03.2008 в 14:02.
Создать новую тему   Часовой пояс GMT +4, время: 08:51.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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