Ajax-Engine

/**
 * @author joshokn
 */
function Engine(){
	//存放事件的列表
	this.eventList=new Array();
	
	//store Engine中的widget列表
	this.widget_L=new Array();
	
}
	
//load widget list
Engine.prototype.load=function(widget_list){
	widget_L = widget_list;
}


/**
 * 回调,处理事件列表
 * @param {Object} eventList
 * @param {Object} widget_L
 */
Engine.prototype.process = function(){
	for(var i = 0 ; i < widget_L.size; i++){
		//widget 's method!
		widget_L[i].processMess(eventList);
	}
}

/**
 * 这里就是向后台定时轮询取事件
 * @param {Object} widget_L
 */
Engine.prototype.GetEventsInfo = function(){					
	var xmlHttp;
	try {
		xmlHttp = new XMLHttpRequest();
   	} catch(e) {
   		try {
   			xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e) {
  		 	try {
  				xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
  			} 
  			catch(e) {
				xmlHttp = false;
   			}
		}		
  	}
	
	if(xmlHttp){		
		xmlHttp.open("POST" , "tree?name=engine, false);
		
		xmlHttp.send(null);
		if(xmlHttp.readyState == 4){	
			var response = xmlHttp.responseText;
                  //数据结构根据具体的业务来定
			var text = response.split("&");
			var name = text[0];
			var widget_name = text[1];
			var widget_id = text[2];
			var widget_type = text[3];
			var tempArray = new Array(widget_name,widget_id, widget_type);
			Engine.eventList[count++] = tempArray;
			
                  //取到的消息交给process处理
			process();
		}	
	}	
}




/**
 * 启动引擎,定时轮询
 */
Engine.prototype.start = function(){
	 window.setInterval("GetEventsInfo()",5000);		
};
	

这个Engine的位置是放在前台的,它的作用,就是负责收集消息,分发消息.
代码仍有不少累赘,比如eventlist没有必要作为一个属性,它的完全可以是一个临时变量,待改进。
我想说的是有了这个引擎,b/s中的MVC结构就更加清晰了。
前台的widget只需要将自己的改变通知后台(相当于VIEW通知MODEL),其它的事情就不需多问了;Engine也只需要做收发的工作(controler负责接受模型的改变,去通知view).

你可能感兴趣的:(数据结构,mvc,Ajax,prototype,Microsoft)