是的,這是可能的。儘管最好的方法是將視圖綁定到對象值。
您的意見似乎並不相關的「一個聚合其他」,但他們的父母(容器視圖)知道兩個。因此,父級會將對象引用傳遞給兩個視圖,並且在更新此實例時,視圖將通過數據綁定進行通知和更新。
如果視圖彼此完全獨立,它將是通過應用程序通過應用程序分派事件的最直接方式。您應該引入由應用程序分派的新事件類型(即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堅定我建議委託:聲明塊,給它一個id並從視圖中分派事件來查看。你只需要設置聽衆。這樣你可以很容易地實現一個相當乾淨的結構,因爲你只需重構委託。使用委託作爲基類,您可以事件處理委託中的所有事件,因此您的視圖保持乾淨,並且最重要的是,可以輕鬆地轉移到不同的MVC方法,因爲您已經從應用程序行爲中隔離了視圖行爲。
最後,您會希望使用MVC框架(例如RobotLegs)來輕鬆擴展您的應用程序。