如何将变量值从一个MXML传递到另一个MXML?

时间:2012-12-20 06:34:41

标签: actionscript mxml

我正在使用ActionScript在Flash Builder中执行一个项目。

我有两个MXML文件:login.mxml和welcome.mxml。

login.mxml:

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

welcome.mxml:

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

我必须将login.mxml中的用户名值传递给welcome.xml。 是否可以将变量值从一个MXML传递到另一个MXML文件?怎么样?

1 个答案:

答案 0 :(得分:0)

是的,有可能。最好的方法是将视图绑定到对象值。

您的观点似乎与“一个聚合另一个”无关,但他们的父级(容器视图)知道两者。因此父级会将对象引用传递给两个视图,并且在更新此实例时,将通过数据绑定通知和更新视图。

如果视图完全相互独立,那么通过应用程序通过应用程序分发事件将是最直接的方式。您应该引入一个由应用程序调度的新事件类型(即SystemEvent)。为了让你的应用程序免于对视图中使用的特定全局变量的过多引用,我建议一个代表,如果你还要坚持使用MVC:

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:Declarations块,给它一个id并从视图调度事件到视图。您只需要设置监听器。这样您就可以轻松实现相当干净的结构,因为您只需要重构委托。利用委托作为基类,您可以事件处理委托中的任何事件,因此您可以保持视图保持干净,最重要的是,很容易移植到不同的MVC方法,因为您已经从应用程序行为中隔离了视图行为。 / p>

最后,您需要使用MVC框架(例如RobotLegs)才能轻松扩展您的应用程序。