浏览 2712 次
锁定老帖子 主题:Ajax-Engine
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2006-11-03
/** * @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). 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |