.shivanshi.
. Home . Share . Share Success . Join Us! .

ActionScript - Code Samples

Model View Controller

Download mvc.zip.

Folder/Package structure:
mvc\mvc.fla
mvc\com\shivanshi\mvc\Model.as
mvc\com\shivanshi\mvc\View.as
mvc\com\shivanshi\mvc\Controller.as


// first frame in mvc.fla
import com.shivanshi.mvc.*;
var view:View = new View(this);  


// Model.as
import mx.events.EventDispatcher;
class com.shivanshi.mvc.Model {
	private var m_timeline:MovieClip;
	private var clip:MovieClip;
	private var m_state:String;
	private var m_event:Object;
	private var dispatchEvent:Function;
	public var addEventListener:Function;
	public var removeEventListener:Function;
	function Model(p_timeline:MovieClip, p_state:String) {
		m_timeline = p_timeline;
		m_state = p_state;
		EventDispatcher.initialize(this);
	}
	public function init() {
		clip = m_timeline.createEmptyMovieClip("mc", m_timeline.getNextHighestDepth());
		clip["owner"] = this;
		clip.onEnterFrame = function() {
			this["owner"].dispatchState(this["owner"].m_state);
		};
	}
	private function dispatchState(m_state:String) {
		var event = m_state;
		this.dispatchEvent({type:event, target:this, state:(m_state), event:m_event});
	}
	public function changeModelState(p_state:String, p_event:Object) {
		m_state = p_state;
		m_event = p_event;
	}
}   



 // View.as
import com.shivanshi.mvc.*;
class com.shivanshi.mvc.View {
	private var m_timeline:MovieClip;
	var controller;
	function View(p_timeline:MovieClip) {
		m_timeline = p_timeline;
		controller = new Controller(m_timeline);
		controller.init("stateDfault");
		m_timeline.state_txt.text = "Click on a button to respective state - A, B or C.";
		m_timeline["owner"] = this;
		m_timeline.a_btn.addEventListener("click", controller);
		// alternatively
		//m_timeline.a_btn.onRelease = function() {
		//this._parent["owner"].controller.changeModelState("A");
		//};
		m_timeline.b_btn.addEventListener("click", controller);
		// alternatively
		//m_timeline.b_btn.onRelease = function() {
		//this._parent["owner"].controller.changeModelState("B");
		//};
		m_timeline.c_btn.addEventListener("click", controller);
		// alternatively
		//m_timeline.c_btn.onRelease = function() {
		//this._parent["owner"].controller.changeModelState("C");
		//};
	}
}


// Controller.as
import com.shivanshi.mvc.*;
class com.shivanshi.mvc.Controller {
	private var m_timeline:MovieClip;
	private var model;
	function Controller(p_timeline:MovieClip) {
		m_timeline = p_timeline;
	}
	public function init(state:String) {
		//trace(timeline);
		model = new Model(m_timeline, state);
		model.addEventListener("A", this);
		model.addEventListener("B", this);
		model.addEventListener("C", this);
		model.init();
	}
	function click(evt:Object) {
		switch (evt.target._name) {
		case "a_btn" :
			changeModelState("A", evt);
			break;
		case "b_btn" :
			changeModelState("B", evt);
			break;
		case "c_btn" :
			changeModelState("C", evt);
			break;
		default :
			break;
		}
	}
	public function changeModelState(str:String, evt:Object) {
		model.changeModelState(str, evt);
	}
	public function A(evt:Object) {
		m_timeline.state_txt.text = "model set to State "+evt.state+" at "+m_timeline+" by "+evt.event.target._name+".";
	}
	public function B(evt:Object) {
		m_timeline.state_txt.text = "model set to State "+evt.state+" at "+m_timeline+" by "+evt.event.target._name+".";
	}
	public function C(evt:Object) {
		m_timeline.state_txt.text = "model set to State "+evt.state+" at "+m_timeline+" by "+evt.event.target._name+".";
	}
}
Add Favorite
| About Us | Site Map | Privacy Policy | Contact Us |
.shivanshi.