2012-03-11 4 views
0

私はHaxeプロジェクトで使用するために、以下のマイクロフレームワークCube https://github.com/xirsys/cubeを使用して学習しています。キューブフレームワークを使用してHaxeのビューをメディエータに動的にマップする方法

私が見つけた例は非常に役に立ちましたが、実行した例は、実行時にビューをメディエータに登録してマッピングすることがわかりません。

私は近いと思いますが、うまく動作していないようです。私の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); 
    } 
} 



} 

答えて

0

私だけRobotlegsと協力し、フレームワークを知らないが、おそらくあなたはそれを行うことができる唯一の方法は、ビューおよびコマンドでメディエータ実行をマッピングすることです。 ViewクラスとMediatorクラスを保持するEventを作成し、そのイベントのCommandを登録し、必要なときにディスパッチし、実行時にMediatorMapを使用する必要があります。

希望します。

2

私はhaxeに新しく、私はMattが書いたことをしようとしています。だから、私がこれまでに出て働いてきたものだ:

では、あなたのエージェントの()メソッドを開始:

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上では動作しませんようだ;)

関連する問題