1

フレームワーク pureMVC に基づいて小さな as3 プログラムを作成しようとしました。基本原理は理解できたのですが、どこにカスタムロジックを配置すればいいのかわかりません。たとえば、10 個の画像を読み込む必要があります。プロキシを初期化するコマンドを作成しました。

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 の正しいバリアントは何ですか?

4

1 に答える 1

1

アプリケーションの起動時に 10 個の画像を読み込みますか? そうでない場合は、load()公開して Mediator から呼び出し、UI イベントに応答します。

もしそうなら、あなたが持っているものはうまくいくでしょう。代替手段の 1 つは、GalleryProxy を記述して、コンストラクターを呼び出さないようload()にすることです。代わりに、Command でプロキシを登録し、画像リストをロードproxy.load(images[i])して、ループで呼び出すことができます。

于 2015-01-14T18:34:09.480 に答える