Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Запуск сеттера класса из строкового представления (http://www.flasher.ru/forum/showthread.php?t=174613)

djyamato 29.01.2012 18:09

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

У айтема есть метод 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();
                        }
                }
        }
}


silin 29.01.2012 19:12

>> как запустить сеттер класса а не метод ?
сеттер от метода мало чем отличается в этом смысле
в пример не сумел вникнуть, поэтому в чем проблема не совсем ясно, может на таком примере объяснишь?
Код 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;
        }
 
}


djyamato 29.01.2012 19:20

точно
test["prop"] = "qwerty";
И чего это я сам не догадался
Спасибо


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

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