2012-12-20 3 views
0

ActionScript를 사용하여 Flash Builder에서 프로젝트를 수행하고 있습니다.하나의 MXML에서 다른 MXML로 변수 값을 전달하는 방법은 무엇입니까?

두 개의 MXML 파일 (login.mxml 및 welcome.mxml)이 있습니다.

login.mxml :

var username:String="sample"; 
var password:String="sample"; 

welcome.mxml :

trace("welcome"+username); // o/p-welcome sample 

내가 welcome.xml하는 login.mxml에서 사용자 이름 값을 전달해야합니다. 하나의 MXML에서 다른 MXML 파일로 변수 값을 전달할 수 있습니까? 방법?

답변

0

예, 가능합니다. 가장 좋은 방법은 뷰를 객체 값에 바인딩하는 것입니다.

귀하의 의견은 "하나는 다른 것을 집계합니다"라는 측면에서 관련이없는 것 같지만 그 부모 (컨테이너보기)는 둘 다 알고 있습니다. 따라서 부모는 객체 참조를 두 뷰에 전달하고이 인스턴스가 업데이트되면 뷰에 데이터 바인딩을 통해 알림이 업데이트되고 업데이트됩니다.

보기가 서로 완전히 독립적 인 경우 응용 프로그램을 통해 응용 프로그램을 통해 이벤트를 전달하는 가장 직접적인 방법입니다. 응용 프로그램에서 전달하는 새 이벤트 유형 (즉, SystemEvent)을 소개해야합니다.

package de.guj.vila.delegates { 
    import flash.events.Event; 
    import flash.events.IEventDispatcher; 

    import mx.core.FlexGlobals; 

    import mx.core.IMXMLObject; 
    import mx.core.UIComponent; 

    public class ViewDelegate implements IEventDispatcher, IMXMLObject { 

    //--------------------------------------------------------------------- 
    // 
    //   Properties 
    // 
    //--------------------------------------------------------------------- 

    private var _bus:IEventDispatcher; 

    private var _uiComponent:UIComponent; 

    /** 
    * The view which uses the delegate. 
    */ 
    public function set uiComponent(value:UIComponent):void { 
     _uiComponent = value; 
    } 

    //--------------------------------------------------------------------- 
    // 
    //   Constructor 
    // 
    //--------------------------------------------------------------------- 

    public function ViewDelegate() { 
     _bus = FlexGlobals.topLevelApplication as IEventDispatcher; 
    } 

    //--------------------------------------------------------------------- 
    // 
    //   Implemented Methods 
    // 
    //--------------------------------------------------------------------- 

    /** 
    * @inheritDoc 
    * 
    * @see flash.events.IEventDispatcher 
    */ 
    public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void { 
     _bus.addEventListener(type, listener, useCapture, priority, useWeakReference); 
    } 

    /** 
    * @inheritDoc 

    * @see flash.events.IEventDispatcher 
    */ 
    public function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void { 
     _bus.removeEventListener(type, listener, useCapture); 
    } 

    /** 
    * @inheritDoc 

    * @see flash.events.IEventDispatcher 
    */ 
    public function dispatchEvent(event:Event):Boolean { 
     return _bus.dispatchEvent(event); 
    } 

    /** 
    * @inheritDoc 
    * 
    * @see flash.events.IEventDispatcher 
    */ 
    public function hasEventListener(type:String):Boolean { 
     return _bus.hasEventListener(type); 
    } 

    /** 
    * @inheritDoc 
    * 
    * @see mx.core.IMXMLObject 
    */ 
    public function initialized(document:Object, id:String):void { 
     uiComponent = document as UIComponent; 
    } 

    /** 
    * @inheritDoc 
    * 
    * @see flash.events.IEventDispatcher 
    */ 
    public function willTrigger(type:String):Boolean { 
     return _bus.willTrigger(type); 
    } 
    } 
} 

당신은 단지 FX에 물건 수 있습니다 아직 MVC에 확실히 할 수 있다면보기에 사용되는 특정 전역 변수에 너무 많은 참조에서 깨끗한 당신이 응용 프로그램을 유지하기 위해, 나는 대리인을 건의 할 것입니다 : Declarations 블록은 id를주고 뷰에서 뷰로 이벤트를 전달합니다. 청취자를 설정하기 만하면됩니다. 이 방법을 사용하면 대리자를 리팩터링하기 만하면되므로 깔끔한 구조를 쉽게 구현할 수 있습니다. 위임을 기본 클래스로 사용하면 위임자의 모든 이벤트를 처리 할 수 ​​있으므로 뷰를 깨끗하게 유지할 수 있으며 가장 중요한 것은 다른 MVC 방식으로 포팅하기 쉽습니다. 이미 애플리케이션 비헤이비어에서 뷰 비헤이비어를 분리했기 때문입니다.

결국 MVC 프레임 워크 (예 : RobotLegs)를 사용하여 응용 프로그램을 쉽게 확장 할 수 있습니다.

관련 문제