API Docs for: 最后更新日期:2014年11月10日
Google搜索   
Show:

File: LView.js

/** @language chinese
 * <p>视图View</p>
 * <p>视图是一个LSprite的子对象。视图必须放到Views文件夹内,视图的名字以View结尾。</p>
 * <p>控制器Controller一共继承自两个类LMvcObject,LSprite,所以除了可以使用LMvcObject的函数之外,还拥有LSprite类addChild等所有属性和函数,所以LView是一个可视化的类。</p>
 * <p>※由于视图View的construct函数是在控制器Controller的construct函数之后执行,所以View中使用控制器的一些属性或者从控制器传来值的时候,是无法在construct中使用的,那么一般可以给控制器Controller添加LEvent.COMPLETE事件,像下面的demo一样这么做。</p>
 * @class LView
 * @extends LMvcObject
 * @constructor
 * @since 1.8.4
 * @example
 *	//控制器中代码
 *	ExampleController.prototype.construct = function(){
 *		//在控制器的construct中读取必要的素材和类,比如下面读取几个模型,然后回调modelLoadComplete
 *		this.load.model(["User/User","User/Character"],this.modelLoadComplete);
 *	}
 *	ExampleController.prototype.modelLoadComplete = function(){
 *		//通知视图,控制器准备工作已经结束
 *		this.dispatchEvent(LEvent.COMPLETE);
 *		//给控制器添加一个值,然后通知视图,这样视图中就可以使用它
 *		this.setValue("myname","testName");
 *		this.dispatchEvent(LController.NOTIFY);
 *	}
 *	//视图中代码
 *	ExampleView.prototype.construct = function(){
 *		//在视图的construct中给控制器添加LEvent.COMPLETE事件
 *		this.controller.addEventListener(LEvent.COMPLETE, this.init.bind(this));
 *	}
 *	ExampleView.prototype.init = function(){
 *		//等待控制器准备工作结束后执行
 *		this.txtName = new LTextField();
 *		this.x = 100;
 *		this.y = 100;
 *		this.addChild(this.txtName);
 *	}
 *	ExampleView.prototype.updateView = function(){
 *		//将控制器中添加的值赋给this.txtName
 *		this.txtName.text = this.controller.getValue("myname");
 *		trace(this.txtName.text);//out: testName
 *	}
 * @public
 */
var LView = (function() {
	function LView(controller){
		var self = this;
		base(self,LMvcObject,[]);
		base(self,LSprite,[]);
		self.mvcType = "view";
		if (controller) {
			/** @language chinese
			 * 视图的控制器。
			 * @property controller
			 * @type LController
			 * @since 1.8.4
			 * @public
			 */
			self.controller = controller;
			/** @language chinese
			 * 视图的模型。
			 * @property model
			 * @type LModel
			 * @since 1.8.4
			 * @public
			 */
			self.model = controller.model;
			self.controller.addView(self);
		}
	}
	LView.prototype.die = function(){
		var self = this;
		if (self.controller) {
			self.controller.removeView(self);
		}
		if(self.baseView){
			self.controller.ll_dispatcher = {};
			self.controller.ll_viewList = [];
		}
		self.callParent("die",arguments);
	};
	/** @language chinese
	 * 在自己控制器发送LController.NOTIFY消息的时候,则自动调用自己的updateView函数
	 * @method updateView
	 * @since 1.8.4
	 * @example
	 *	//控制器中代码
	 *	ExampleController.prototype.construct = function(){
	 *		this.setValue("myname","testName");
	 *		this.dispatchEvent(LController.NOTIFY);
	 *	}
	 *	//视图中代码
	 *	ExampleView.prototype.updateView = function(){
	 *		trace(this.controller.getValue("myname"));//out: testName
	 *	}
	 * @public
	 */
	LView.prototype.updateView = function(){};
	return LView;
})();