作者ben0209 (邦邦)
看板Flash
標題Re: [問題] 關於puremvc,相同類型view物件註冊med …
時間Thu Sep 1 11:02:37 2011
TestMultiBtnMediator2.as
package
{
import flash.display.DisplayObjectContainer;
import flash.display.Shape;
import flash.display.SimpleButton;
import flash.display.Sprite;
import flash.text.TextField;
[SWF(width="400", height="400")]
public class TestMultiBtnMediator2 extends Sprite
{
public var btnsContainer:DisplayObjectContainer;
private var facade:MyFacade2;
public function TestMultiBtnMediator2()
{
super();
initUI();
initPureMVC();
}
private function initUI():void{
btnsContainer = new Sprite();
addChild(btnsContainer);
}
private function initPureMVC():void{
facade = new MyFacade2();
facade.startup(this);
}
}
}
MyFacade2.as
package
{
import flash.display.SimpleButton;
import mediator.MyBtnMediator;
import mediator.MyBtnsContainerMediator;
import org.puremvc.as3.patterns.facade.Facade;
public class MyFacade2 extends Facade
{
public function startup(viewComp:TestMultiBtnMediator2):void{
var myBtnsContainerMediator:MyBtnsContainerMediator = new
MyBtnsContainerMediator(viewComp.btnsContainer);
this.registerMediator(myBtnsContainerMediator);
}
}
}
mediator/MyBtnsContainerMediator.as
package mediator
{
import flash.display.DisplayObjectContainer;
import flash.display.Shape;
import flash.display.SimpleButton;
import flash.text.TextField;
import org.puremvc.as3.patterns.mediator.Mediator;
public class MyBtnsContainerMediator extends Mediator
{
static public const NAME:String = "MyBtnsContainerMediator";
private function get viewComp():DisplayObjectContainer{
return viewComponent as DisplayObjectContainer;
}
public function
MyBtnsContainerMediator(viewComponent:DisplayObjectContainer)
{
super(NAME, viewComponent);
}
override public function onRegister():void{
initUI();
}
private function initUI():void{
var btn:SimpleButton;
var btnMediator:MyBtnMediator;
for(var i:int=0; i<20; i++){
//init ui
btn = makeBtn(i);
viewComp.addChild(btn);
btn.x = 10 * i;
btn.y = 10 * i;
//reg mediator
btnMediator = new MyBtnMediator(btn);
facade.registerMediator(btnMediator);
}
}
private function makeBtn(idx:int):SimpleButton{
var txt:TextField = new TextField();
txt.text = String(idx);
var hit:Shape = new Shape();
hit.graphics.beginFill(0xffffff * Math.random());
hit.graphics.drawRect(0, 0, 20, 20);
hit.graphics.endFill();
var btn:SimpleButton = new SimpleButton(txt, txt, txt, hit);
return btn;
}
}
}
mediator/MyBtnMediator.as
package mediator
{
import flash.display.SimpleButton;
import flash.events.MouseEvent;
import org.puremvc.as3.patterns.mediator.Mediator;
public class MyBtnMediator extends Mediator
{
static public function getNameOfMediator(viewCompName:String):String{
return "MyBtnMediator_" + viewCompName;
}
private function get viewComp():SimpleButton{
return viewComponent as SimpleButton;
}
public function MyBtnMediator(viewComponent:SimpleButton)
{
super(getNameOfMediator(viewComponent.name), viewComponent);
}
override public function onRegister():void{
trace(viewComp, viewComp.name, mediatorName, viewComp.x, viewComp.y);
viewComp.addEventListener(MouseEvent.CLICK, onBtnClickHandler);
}
private function onBtnClickHandler(e:MouseEvent):void{
trace(mediatorName, "clicked");
}
}
}
※ 引述《hpuser (HpUser)》之銘言:
: 請問各位先進:
: 舞台上有一個自訂的button,移過去會變大,移出去會變小,
: 如要實作puremvc,就要 把這個button註冊給一個mediator,
: 由這個mediator來控制變大變小的效果.
: 可是因需要,場景上會動態增加多個button,甚至更多,
: 難道要一個一個註冊給mediator嗎?
: 有沒有可能 我只要註冊這個自訂button類別給mediator,
: 一次就可以了,或是更方便的作法?
: 看教學,view物件似乎都是舞台上已經存在的實體居多,
: 沒看過註冊類別給mediator.
: 謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.147.239.66
→ ben0209:這篇,開始pureMVC之前只有btns container, 09/01 11:04
→ ben0209:開始 pureMVC 之後,再於 container 的 mediator 中, 09/01 11:04
→ ben0209:動態建立 btn * 20,並註冊對應的 mediator 09/01 11:05
推 hpuser:感謝Ben大提供兩種不同方法的詳細教學,小弟受教了 09/01 11:52