Как да фалшифицирате връщане на AsyncToken в ActionScript 3

Използвайки Parsley, имам услуга, до която имам достъп чрез публична функция [Command(selector='list')] getRssFeed( msg:RssEvent ):AsyncToken { return service.list() as AsyncToken; }

когато посоча към "Реалната" RssService, всичко работи според очакванията. Проблемът ми е, когато посочвам "Mock" RssService. Не мога да разбера как да фалшифицирам AsyncToken с някакво фиктивно връщане на данни... някой знае ли как да направи това?


person Brett    schedule 07.05.2010    source източник


Отговори (4)


Решено ............ ;)

 public function list():AsyncToken

     var rssFeed:Array = [rss,rss,rss];
     var token:AsyncToken = createToken(rssFeed);
     token.addResponder(new AsyncResponder(resultHandler, null));
     return token;

  }

  private function resultHandler(event:ResultEvent, token:AsyncToken = null):void
  {
     event.token.dispatchEvent(event);   
  }


  protected function createToken(result:Object):AsyncToken
  {
     var token:AsyncToken = new AsyncToken(null);
     setTimeout(applyResult, Math.random()*500, token, result);
     return token;
  }

  private function applyResult(token:AsyncToken, result:Object):void
  {
     mx_internal:token.setResult(result);
     var event:ResultEvent = new ResultEvent(ResultEvent.RESULT, false, true, result, token);
     mx_internal:token.applyResult(event);
     trace(token);
  }
person Brett    schedule 07.05.2010
comment
Уверете се, че сте добавили use namespace mx_internal; към вашата макетна услуга. Кредит на Тим в отговора по-долу. - person mbseid; 19.01.2012

Използвайки Parsley 3.0, имате по-добър вариант с асинхронни команди на Spicefactory:

public class MockCommand
{
    public var callback:Function;

    public function execute():void
    {
        var timer:Timer = new Timer(500, 1);
        timer.addEventListener(TimerEvent.TIMER_COMPLETE, timer_completeHandler);
        timer.start();
    }

    private function timer_completeHandler(event:TimerEvent):void
    {
        callback(mockResultData);
    }
}

Няма нужда от mx_internal импортиране.

person Romain F.    schedule 09.10.2012

Не забравяйте да добавите:

use namespace mx_internal;

В противен случай ще получите това изключение.

[Fault] изключение, информация=TypeError: Грешка #1006: setResult не е функция.

person Tim    schedule 21.12.2010

можете да приложите методи touchDown и touch up.
person Vladimir Tsvetkov    schedule 14.09.2011