2014-07-25 8 views
1

프레임 워크 pureMVC를 기반으로 한 작은 as3 프로그램을 작성하려고했습니다. 나는 그것의 기본 원리를 이해했다. 그러나 나는 이해할 수 없다. 예를 들어 10 개의 이미지를로드해야합니다. 나는 init 프록시라는 명령을 만들었습니다.어디에서 pureMVC (as3)의 사용자 정의 로직을 사용해야합니까?

package app.controller 
{ 
    import app.model.GalleryProxy; 
    import dicts.Constants; 
    import org.puremvc.interfaces.INotification; 

    public class LoadFilesCommand extends BaseCommand 
    { 
     public function LoadFilesCommand() { } 

     override public function execute(note:INotification):void 
     { 
      facade.registerProxy(new GalleryProxy(Constants.FILES_LIST)); 
     } 
    } 
} 

그리고 프록시는 다음과 같습니다

package app.model 
{ 
    import dicts.Constants; 
    import flash.display.Bitmap; 
    import flash.display.BitmapData; 
    import flash.display.Loader; 
    import flash.display.LoaderInfo; 
    import flash.events.ErrorEvent; 
    import flash.events.Event; 
    import flash.events.IOErrorEvent; 
    import flash.net.URLRequest; 
    import org.puremvc.interfaces.IProxy; 
    import org.puremvc.patterns.proxy.Proxy; 

    public class GalleryProxy extends Proxy implements IProxy 
    { 
     public function GalleryProxy(list:Vector.<String>) 
     { 
      super(Constants.PROXY_GALLERY); 
      _fileList = list; 
      _total = _fileList.length; 
      load(); 
     } 

     public function get currentImage():Bitmap 
     { 
      return _images[_index]; 
     } 

     //-------------------------------------------------------------------------- 
     // PRIVATE SECTION 
     //-------------------------------------------------------------------------- 
     private var _fileList:Vector.<String>; 
     private var _total:uint; 
     private var _loaded:uint = 0; 
     private var _images:Array = []; 
     private var _index:int; 

     private function load():void 
     { 
      var loader:Loader; 
      for (var i:int = 0; i < _total; i++) 
      { 
       loader = new Loader(); 
       loader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoadHandler); 
       loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, errorHandler); 
       loader.load(new URLRequest(_fileList[i])); 
      } 
     } 

     private function imageLoadHandler(event:Event):void 
     { 
      var info:LoaderInfo = LoaderInfo(event.currentTarget); 
      _images[Constants.FILES_LIST.indexOf(info.url)] = info.content; 
      info.removeEventListener(Event.COMPLETE, imageLoadHandler); 
      info.removeEventListener(IOErrorEvent.IO_ERROR, errorHandler); 
      _loaded++; 
      if (_loaded >= _total) 
       sendNotification(Constants.COMMAND_SHOW_MAIN); 
     } 

     private function errorHandler(event:ErrorEvent):void 
     { 
      throw new Error("bad link or internet disconnect"); 
     } 
    } 
} 

이제 내 프록시는 독립적으로 이미지를로드 (기능 부하()와 imageLoadHandler) 가 맞습니까? 아니면이 논리를 Command 클래스로 옮겨야합니까? 또는이 논리를 포함하는 LoadService.as를 만들어야합니까? pureMVC의 올바른 변형은 무엇입니까?

답변

1

응용 프로그램 시작시 10 개의 이미지를로드 하시겠습니까? 그렇지 않은 경우 load()을 공개하고 중재자로부터 UI 이벤트에 응답하여 호출하십시오.

그렇다면 보유하고있는 항목이 정상적으로 작동합니다. 대신 GalleryProxy를 작성하여 생성자에서 load()을 호출하지 않고 대신 명령을 프록시에 등록하고 이미지 목록을로드 한 다음 proxy.load(images[i])을 루프로 호출 할 수 있습니다.