rot*_*rcz 6 model-view-controller actionscript actionscript-3
所有程序都是单击一个按钮,它会告诉您在文本字段中单击按钮的次数.
文档类:这是代码的入口点.
package {
import flash.display.MovieClip;
/**
* MVCTest.as
* @author rotaercz
*/
public class MVCTest extends MovieClip {
private var _model:Model;
private var _view:View;
private var _control:Control;
public function MVCTest() {
_model = new Model();
_view = new View(this);
_control = new Control(_model, _view);
}
}
}
Run Code Online (Sandbox Code Playgroud)
型号类:基本型号代码.
package {
/**
* Model.as
* @author rotaercz
*/
public class Model {
private var _totalClicks:int;
public function AddClick():void {
_totalClicks++;
}
public function get Clicks():int {
return _totalClicks;
}
public function Model() {
_totalClicks = 0;
}
}
}
Run Code Online (Sandbox Code Playgroud)
控件类:控制模型的输入和更新,并在此处查看.
package {
import flash.events.MouseEvent;
/**
* Control.as
* @author rotaercz
*/
public class Control {
private var _model:Model;
private var _view:View;
public function Control(model:Model, view:View):void {
_model = model;
_view = view;
_view.addEventListener(MouseEvent.CLICK, OnClick);
}
private function OnClick(e:MouseEvent):void {
_model.AddClick();
_view.Text = "clicked " + _model.Clicks;
}
}
}
Run Code Online (Sandbox Code Playgroud)
视图类:程序的可视化表示.
package {
import flash.display.MovieClip;
import flash.events.EventDispatcher;
import flash.events.MouseEvent;
import flash.text.TextField;
/**
* View.as
* @author rotaercz
*/
public class View extends EventDispatcher {
private var _parent:MovieClip;
private var _button:MovieClip;
private var _dt:TextField;
public function set Text(s:String):void {
_dt.text = s;
}
public function View(parent:MovieClip) {
_parent = parent;
_dt = _parent.getChildByName("dt") as TextField;
_button = _parent.getChildByName("mcButton") as MovieClip;
_button.addEventListener(MouseEvent.CLICK, OnClick);
}
private function OnClick(e:MouseEvent):void {
dispatchEvent(e);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在传统的 MVC 模式中,视图确实像 www0z0k 所写的那样直接依赖于模型,但我也认为这不是一个理想的解决方案。
他们设置控制器的方式是充当模型和视图之间的中介,这当然是一个非常有效的解决方案。
但是,如果您希望从模型到视图进行更直接的通信(这会节省一些代码),您可以创建一个中央事件调度程序,将其传递给模型并让它们使用中央事件调度程序来调度其更新事件,然后还传递中央事件调度程序到视图,让视图直接监听模型调度的事件。这样视图就不会直接依赖于模型,但它仍然可以侦听它们发送的事件。在这种情况下,控制器只会将视图事件转换为模型。
图表: http: //bit.ly/sTSDVT
控制器直接更新模型,但它也侦听中央事件调度程序以获取来自模型的更新(如果需要)并将其转换为视图。它还监听视图事件
该模型仅依赖于事件调度程序并使用它来调度更新事件。
视图仅依赖于事件调度程序并侦听来自模型的更新事件。它也调度自己的事件。(您可以使用中央事件调度程序,但我不推荐它)
| 归档时间: |
|
| 查看次数: |
2972 次 |
| 最近记录: |