pureMVC(as3)中的自定义逻辑必须在哪里?

时间:2014-07-25 11:42:36

标签: actionscript-3 puremvc

我尝试编写基于框架pureMVC的小as3程序。 我理解它的基本原理,但我无法理解,我必须放置自定义逻辑。 例如,我必须加载10张图像。我创建了命令,即init Proxy。

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");
        }
    }
}

现在我的代理服务器独立加载图片(函数load()和imageLoadHandler) 这是对的吗? 或者我必须将此逻辑移动到Command类? 或者我必须创建一些LoadService.as,它将包含这个逻辑? pureMVC的正确变体是什么?

1 个答案:

答案 0 :(得分:1)

您想在应用程序启动时加载10张图片吗?如果没有,请将load()公开并从Mediator调用它,以响应UI事件。

如果是这样,你所拥有的将会正常工作。另一种方法是编写GalleryProxy,因此它不会在构造函数中调用load() - 相反,您可以让Command注册代理,加载图像列表,并在循环中调用proxy.load(images[i])