我正在使用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文件?怎么样?
答案 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)才能轻松扩展您的应用程序。