joshokn 发表于 2013-1-29 13:17:36

Ajax-Engine

/** * @author joshokn */function Engine(){//存放事件的列表this.eventList=new Array();//store Engine中的widget列表this.widget_L=new Array();}//load widget listEngine.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.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;var widget_name = text;var widget_id = text;var widget_type = text;var tempArray = new Array(widget_name,widget_id, widget_type);Engine.eventList = tempArray;                  //取到的消息交给process处理process();}}}/** * 启动引擎,定时轮询 */Engine.prototype.start = function(){ window.setInterval("GetEventsInfo()",5000);};
这个Engine的位置是放在前台的,它的作用,就是负责收集消息,分发消息.
代码仍有不少累赘,比如eventlist没有必要作为一个属性,它的完全可以是一个临时变量,待改进。
我想说的是有了这个引擎,b/s中的MVC结构就更加清晰了。
前台的widget只需要将自己的改变通知后台(相当于VIEW通知MODEL),其它的事情就不需多问了;Engine也只需要做收发的工作(controler负责接受模型的改变,去通知view).
页: [1]
查看完整版本: Ajax-Engine