這次的範例是兩組 viewComponent 共用同一個 Mediator 外加不同的 instance:
Source code download
要共用的重點就是介面(Interface),所以你會發現這次的兩組 viewComponent 都有實作 IMessageBox
IMessageBox:
public interface IMessageBox
{
function update( newline:String ):void;
}
然後在兩組的 viewComponent 中實作 IMessageBox
<s:Group ....
implements="IMessageBox"
>
<fx:script>
.....
public function update( newline:String ):void{
//IMessageBox interface 實作
data.addItem( newline );
}
.....
</fx:Script>
接下來修改的部份為 MessageBoxMediator
....
[Inject]
public var view:IMessageBox;
//同樣注入屬性...這次記得改成 interface. 因為此 Mediator 為共用
....
接下來在 RobotLegContext startup() 中修改:
....
override public function startup():void
{
//bootstrap here
//auto start, injectViewAs 寫入 viewComponent interface
mediatorMap.mapView( MessageBox, MessageBoxMediator , IMessageBox );
mediatorMap.mapView( MessageBox1, MessageBoxMediator , IMessageBox );
}
....
你會發現 mapView 的 injectViewAs:Class 填入 interface class, 這時候 Robotlegs 的核心在比對 class 的時候才會以 IMessageBox 為主,否則 Mediator 將無法共用,因為在 MessageBoxMediator [Inject] 的 view 為 IMessageBox, 而不是各自實作的 class。
規劃 viewComponent 的共用性也需要考量一下,不然很有可能會有 interface 滿天飛的狀況喔!
以上範例都沒說明到 Command, Proxy and Service ,有興趣的朋友請自行到官網上去找尋相關的教學文章囉!
結論:
Robotlegs 真的很適合懶人 + AS3 MVC 新手學習,不過 Robotlegs 在背地裡做了很多事情,尤其自動化這點雖然方便但是也出現一些奇怪的現象,所以掌控啟動順序可能會比直接用自動化來的安全些...慶幸的是 Robotlegs 程式彈性相當大,非自動化操作起來也是相當的方便。 =)
Comments
Post a Comment