0

Haxe プロジェクトで使用するために、次のマイクロ フレームワーク Cube https://github.com/xirsys/cubeを使用して学習しています。

私が見つけた例は非常に役に立ちましたが、実行時にビューをメディエーターに登録してマッピングすることは、私が見つけた例では理解したくないことの 1 つです。

私は近いと思いますが、うまくいかないようです。これが私の AppContext の外観です。

class AppContext extends Agent<Dynamic, IEvent> 
{
    public function new(container: Dynamic, autoStart:Bool)
    {
        super(container, autoStart);
    }

    override public function initiate()
    {
        mediatorMap.mapView(Main, MainMediator);
        mediatorMap.mapView(Welcome, WelcomeMediator);

        injector.mapSingleton(AppModel, container);
        dispatch(AgentEvent.STARTUP_COMPLETE, null);
    }
}

これが私のメインビューで起こっていることです

class Main extends Sprite
{
    public var agent: AppContext;

    @Inject
    public var dm:AppModel;

    public function new()
    {
        super();
        addEventListener(Event.ADDED_TO_STAGE, onAdded);
        haxe.Log.setColor(0xffffff);
        this.name = "main view";
    }

    public static function main(): Void
    {
        Lib.current.addChild(new Blastroidz());
    }

    private function onAdded(e:Event):Void
    {
        agent = new AppContext(this, false);
        agent.addEventHandler(AgentEvent.STARTUP_COMPLETE, onContextStart);
        agent.initiate();

    }

    private function onContextStart(evt:IEvent):Void
    {
        agent.mediatorMap.createMediator(this);
    }

}

メインビューがメインビューメディエーターにロードされた後、「ウェルカム」ビューを作成し、そのメディエーターを作成してそのように使用したいと思います。

class MainMediator extends xirsys.cube.mvcs.Mediator
{
    @Inject
    public var view:Main;
    public var welcome:Welcome;
    private var viewManager:NMEViewManager;

    override public function onRegister()
    {
        super.onRegister();     
        eventDispatcher.addEventHandler(AppEvent.SET_NEW_VIEW, changeViewHandler);
        initView();
    }

    private function initView():Void
    {
        viewManager = new NMEViewManager(view);
        welcome = new Welcome();

        viewManager.setView(welcome, NMEViewManager.FADE);

            ///// this is the important line that doesn't seem to work \\\\\\
        mediatorMap.createMediator(welcome);
    }

    private function changeViewHandler(e:String):Void
    {
        trace("change view");
    }

私のウェルカムメディエーターはそのように見え、onRegister は起動していないようで、エラーはまったく発生しません.... viewManager がウェルカムビューのメインビューに addChild を処理することに注意してください。

class WelcomeMediator extends xirsys.cube.mvcs.Mediator 
{
    @Inject
    public var view:Welcome;

    override public function onRegister()
    {
        super.onRegister();
        view.addEventListener(Event.COMPLETE, onCompleteHandler);
        trace("welcome mediator registered");
    }

    private function onCompleteHandler(e:Event):Void
    {
        trace("logo complete");
        var event:AppEvent = new AppEvent(AppEvent.SET_NEW_VIEW);
        event.view_name = AppModel.MAIN;

        this.eventDispatcher.dispatch(AppEvent.SET_NEW_VIEW, event);
    }
}



}
4

2 に答える 2

2

私は haxe が初めてで、Matt が書いた sth を実行しようとしています。それが私がこれまでに取り組んできたことです:

あなたのエージェントのinitiate()メソッドで:

injector.mapInstance( Main, container ); // lets you inject the "container" into commands
mediatorMap.mapView( Welcome, WelcomeMediator );

次に、専用のコマンド クラスを作成し (アーキテクチャ上の理由により、メディエーターでは実行しないでください)、「コンテナー」を挿入します。

@Inject
public var container : Main;

execute() メソッドで:

var welcomeView = new Welcome();
container.addChild( welcomeView );
mediatorMap.createMediator( welcomeView );

注意: Cube フレームワークから Agent.hx を変更する必要があることがわかりました。このクラスの一番下までスクロールし、最後のメソッドでアンダースコアを取り除きます。次のようになります。

private function bindMappings()
{
    injector.mapInstance( ICentralDispatcher, eventDispatcher );
    injector.mapSingleton( Injector );
    injector.mapInstance( ICommandMap, commandMap );
    injector.mapInstance( IMediatorMap, mediatorMap );
    injector.mapInstance( IViewMap, viewMap );
    injector.mapInstance( IProxy, proxy );
}

mapInstance はプライベート プロパティまたは sth では機能しないようです ;)

于 2012-10-25T11:52:40.730 に答える
0

フレームワークはわかりませんが、Robotlegs でしか機能しませんでしたが、おそらくそれを行う唯一の方法は、コマンド実行でビューとメディエーターをマッピングすることです。View および Mediator クラスを保持する Event を作成し、そのイベントの Command を登録し、必要に応じてディスパッチし、実行時に Command は mediatorMap を使用する必要があります。

それが役に立てば幸い。

于 2012-04-04T18:22:59.837 に答える