关于状态切换

关于发布框的状态切换问题, 个人实现思路是利用状态机.javascript

每一个状态都是一个独立的对象,而后建立一个状态机来保存当前状态.每次状态发生改变的时候,就检查是否是等于当前状态, 若是不是就当前状态Close掉, 而后将改变的状态设置为当前状态, 代码以下:java

 

		/*状态机*/
var statusMachine = function(item) {
	this.prevStatus = item || null;//设置初始状态
};

statusMachine.prototype = {
	init: function() {
		var _this = this;
	},
	change: function(status) {
                 //检测状态是否存在, 若是存在判断是否等于当前状态
		if (this.prevStatus && this.prevStatus.id != status.id) {
			this.prevStatus.close(); //关闭当前状态
		}

		this.prevStatus = status; //设置状态
		this.prevStatus.show(); //开启当前状态
	},
	close: function() {
		if (this.prevStatus) {
			this.prevStatus.close();
			this.prevStatus = null;
		}
	}
};

var status = new statusMachine();
/*图片状态*/
var image = {
	id: 'image',
	init: function(){			
		var _this = this;
		
		this.ui = {};
		this.ui.img = $('imgBox');
		this.ui.btnOpen = $('#imgOpen');
		
		
		
		this.ui.btnOpen = function(){
			status.change(_this); //切换状态					
		};
	},
	show: function(){
		this.ui.img.show();
	},
	close: function(){
		this.ui.img.hide();
	}
};

/*视频状态*/
var video = {
	id: 'video',
	init: function(){			
		var _this = this;
		
		this.ui = {};
		this.ui.video = $('imgvideo');
		this.ui.btnOpen = $('#videoOpen');
		
		this.ui.btnOpen = function(){
			status.change(_this);//切换状态
		};
	},
	show: function(){
		this.ui.video.show();
	},
	close: function(){
		this.ui.video.hide();
	}
};

  

 

总结:ide

  1.每一个状态都是独立的, 不须要去关注其它状态, 因此怎么改变都不会影响到其它的状态.ui

      2.能够无限扩展和缩减, 即便增长和减小状态也不会影响到其它状态的运行.this

相关文章
相关标签/搜索