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