2010-03-22 77 views
0

我正在學習使用ActionScript 3.0進行MVC實現。到目前爲止,我已經做得很好,但有幾個問題可以使我的學習過程非常愉快。我會非常感謝你的幫助和智慧。需要幫助瞭解Actionscript 3 AS3中的MVC實現,請

讓我解釋一下我是如何實現一個簡單的MVC實現:

我的Flash影片被稱爲FusionMVC。我有同樣的包內的所有MVC文件是這樣的:

的DataModel DataControl上 數據視圖 應用門面

這裏是我的問題:

正如我理解正確的話,每當我需要把一個在主舞臺上顯示對象,我在DataView類中聲明或實現該顯示對象,對嗎?

我在主庫中有一個名爲「Box」的符號/顯示對象。通過在運行時能夠看到的DataView類中實例化它,我將這個符號添加到舞臺上。現在,如果我需要爲此對象添加名爲「ClickHandler」的EventListener:

我該在哪裏聲明此「ClickHandler」事件?我目前在DataModel類中聲明它。

我很困惑的是在哪裏聲明EventHandler方法。 DataModel或DataControl?

謝謝你的幫助。這裏是整個代碼:

//DATAMODEL 

package 
{ 
    import flash.events.*; 
    import flash.errors.*; 

    public class DataModel extends EventDispatcher 
    { 
     public static const UPDATE:String = "modelUpdaed"; 
     private var _txt:String; 

     public function DataModel() 
     { 

     } 

     public function get Text():String 
     { 
      return _txt; 
     } 

     public function set Text(p:String):void 
     { 
      _txt = p; 
      notifyObserver(); 
      trace("MODEL HAS BEEN CHANGED"); 
     } 

     public function notifyObserver():void 
     { 
      dispatchEvent(new Event(DataModel.UPDATE)); 
     } 

     public function sayHello(e:Event):void 
     { 
      trace("HEY HELLO"); 
     } 

    } 
} 

//DATACONTROL 

package 
{ 
    import flash.display.*; 
    import flash.events.*; 
    import flash.errors.*; 

    public class DataControl 
    { 
     private var _model:DataModel; 

     public function DataControl(m:DataModel) 
     { 
      _model = m; 
     } 


    } 
} 

//DATAVIEW 

package 
{ 
    import flash.display.*; 
    import flash.events.*; 
    import flash.errors.*; 

    public class DataView extends Sprite 
    { 
     private var _model:DataModel; 
     private var _control:DataControl; 
     public var b:Box; 

     public function DataView(m:DataModel, c:DataControl) 
     { 
      _model = m; 
      _control = c; 

      addBox(); 
     } 

     public function addBox():void 
     { 
      b = new Box(); 
      b.x = b.y = 150; 
      //b.addEventListener(MouseEvent.CLICK, vHandler); 
      addChild(b); 
     } 


    } 
} 

//APPLICATION FACADE 

package 
{ 
    import flash.display.*; 
    import flash.events.*; 
    import flash.errors.*; 

    public class Main extends Sprite 
    { 
     private var _model:DataModel; 
     private var _control:DataControl; 
     private var _view:DataView; 

     public function Main() 
     { 
      _model = new DataModel(); 
      _control = new DataControl(_model); 
      _view = new DataView(_model, _control); 

      addChild(_view); 
     } 
    } 
} 

回答

1

你是正確的 - 顯示對象應該從自己的孩子處理事件:

public function addBox():void 
    { 
     b = new Box(); 
     b.x = b.y = 150; 
     b.addEventListener(MouseEvent.CLICK, boxClickHandler); 
     addChild(b); 
    } 

處理視圖中的事件:

private function boxClickHandler(event:MouseEvent) 
{ 
    _control.sayHello(); 
} 

然後你只需要在控制器中添加更改模型的方法:

public class DataControl 
{ 
.... 
public function sayHello():void 
{ 
    _model.sayHello(); 
}