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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 29.01.2012, 18:09
djyamato вне форума Посмотреть профиль Отправить личное сообщение для djyamato Посетить домашнюю страницу djyamato Найти все сообщения от djyamato
  № 1  
Ответить с цитированием
djyamato
 
Аватар для djyamato

Регистрация: Feb 2006
Сообщений: 884
Записей в блоге: 2
Отправить сообщение для djyamato с помощью ICQ Отправить сообщение для djyamato с помощью Skype™
По умолчанию Запуск сеттера класса из строкового представления

Простите за сумбурную формулировку, не знаю точно как назвать это и буду рад правильной
Я сделал что-то типа сценария
Каждый айтем которого это объект с ссылкой на класс, строковым представлением метода этого объекта и данными для этого метода

У айтема есть метод execute - он запускает метод объекта
Код AS3:
 
function execute():void
{
   currentItem.class[currentItem.classMethod](currentItem.methodData)
}
как запустить сеттер класса а не метод ?

Вот мой код

Айтем сценария
Код AS3:
package com.div0.managers.scenario
{
	import flash.events.Event;
	import flash.events.EventDispatcher;
 
	import mx.utils.ObjectUtil;
	import mx.utils.OnDemandEventDispatcher;
 
	public class ScenarioItem extends EventDispatcher
	{
		protected var _class:Object;
		protected var _classMethod:String;
		protected var _data:Object;
		protected var _onComplete:Object;
 
		public function ScenarioItem(itemClass:Object, classMethod:String, data:Object=null, onComplete:Object=null)
		{
			_class=itemClass;
			_classMethod=classMethod;
			_data=data;
			_onComplete=onComplete;
		}
 
		public function get itemClass():Object
		{
			return _class;
		}
		public function get methodName():String
		{
			return _classMethod;
		}
		public function get data():Object
		{
			return _data;
		}
 
		public function execute():void
		{
			EventDispatcher(_class).addEventListener(Event.COMPLETE,commandExecutionCompleteHandler);
			if(_data)
			{
				_class[_classMethod](_data);	
			}
			else
			{
				_class[_classMethod]();
			}
		}
 
		protected function commandExecutionCompleteHandler(event:Event):void
		{
			EventDispatcher(_class).removeEventListener(Event.COMPLETE,commandExecutionCompleteHandler);
			if(_onComplete)
			{
				if(_onComplete.completeEventReceiver)
				{
					if(_onComplete.receiverMethod)
					{
						_onComplete.completeEventReceiver[_onComplete.receiverMethod](_onComplete.methodData);
					}
				}
			}
			dispatchEvent(new Event(Event.COMPLETE));
		}
	}
}
Сценарий
Код AS3:
package com.div0.managers.scenario
{
	import flash.events.Event;
	import flash.events.EventDispatcher;
 
	import mx.utils.ObjectUtil;
 
	public class Scenario
	{
		private static var instance:Scenario;
 
		protected var _items:Vector.<ScenarioItem>=new Vector.<ScenarioItem>();
 
		protected var _counter:int=0;
 
		public static function getInstance():Scenario
		{
			if (instance == null)
			{
				instance = new Scenario();
			}
			return instance;
		}
 
		public function addItem(item:ScenarioItem):void
		{
			_items.push(item);
 
			trace("\nscenario total items :"+_items.length);
			for(var i:int=0;i<_items.length;i++)
			{
				trace("   ITEM "+_items[i].itemClass+" method "+_items[i].methodName+"   data:"+_items[i].data);
			}
		}
 
		public function clear():void
		{
			_items=new Vector.<ScenarioItem>();
			_counter=0;
		}
 
		public function start():void
		{
			if(_items.length>0)
			{
				proceedItem();
			}
		}
 
		public function push(item:ScenarioItem):void
		{
			_items.push(item);
			_counter++;
			proceedItem();
		}
 
 
		public function addMultyply(items:Vector.<ScenarioItem>):void
		{
			_items.push(items);
 
			_counter++;
			proceedItem();
		}
 
 
		protected function proceedItem():void
		{
			trace("SCENARIO executing "+_items[_counter].methodName);
			EventDispatcher(_items[_counter]).addEventListener(Event.COMPLETE,itemCompleteHandler);
			_items[_counter].execute();
		}
 
		protected function itemCompleteHandler(event:Event):void
		{
			trace("scenario item complete");
			EventDispatcher(_items[_counter]).removeEventListener(Event.COMPLETE,itemCompleteHandler);
 
			_items[_counter]=null;
 
			_counter++;
			if(_counter<_items.length)
			{
				proceedItem();
			}
		}
	}
}

Старый 29.01.2012, 19:12
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 2  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
>> как запустить сеттер класса а не метод ?
сеттер от метода мало чем отличается в этом смысле
в пример не сумел вникнуть, поэтому в чем проблема не совсем ясно, может на таком примере объяснишь?
Код AS3:
package
{
	import flash.display.Sprite;
	import flash.events.Event;
 
	public class Main extends Sprite
	{
 
		public function Main():void
		{
			var test:SomeClass = new SomeClass();
			test["prop"] = "qwerty";
			trace("test.prop : " + test.prop);
		}
 
	}
 
}
 
////////////
class SomeClass
{
	private var _prop:String;
 
	public function get prop():String
	{
		return _prop;
	}
 
	public function set prop(value:String):void
	{
		_prop = value;
	}
 
}

Старый 29.01.2012, 19:20
djyamato вне форума Посмотреть профиль Отправить личное сообщение для djyamato Посетить домашнюю страницу djyamato Найти все сообщения от djyamato
  № 3  
Ответить с цитированием
djyamato
 
Аватар для djyamato

Регистрация: Feb 2006
Сообщений: 884
Записей в блоге: 2
Отправить сообщение для djyamato с помощью ICQ Отправить сообщение для djyamato с помощью Skype™
точно
test["prop"] = "qwerty";
И чего это я сам не догадался
Спасибо

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

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

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


 


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


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