2012-03-11 3 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 클래스를 보유하고 해당 이벤트에 대한 명령을 등록하고 필요한 경우 디스패치하고 실행시 mediatorMap을 사용해야하는 이벤트를 만들어야합니다.

희망이 있습니다.

2

나는 새에게 haxe이고 나는 Matt가 쓴 그 sth을하려고 노력하고있다. 그래서 내가 지금까지 밖으로 작업 한 내용은 다음과 같습니다에

대리인의 방법) (시작 :

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

다음 (때문에 건축 이유로 중재자에 그것을 해달라고) 전용 명령 클래스를 생성하고 주입 "컨테이너"의 실행

@Inject 
public var container : Main; 

() 메소드

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에 작동하지 않습니다 보인다)