AJAX驱动的单页应用-Pub/Sub

有三样东西对AJAX驱动的单页应用很关键:时间委托、历史管理和通信模式(Pub/Sub)。


首先让我们介绍一下Pub/Sub是个什么东西。我们可以把这个东西叫做广播,大概的意思就是当你发布了一个东西,那么其他的人就都能收到了。你可以想一下,一般说来在单页应用中,是高度模块化。那么就会涉及到一个通信的问题,按照以往的方式,我们会声明一个特定的对象,这个对象是专门用来作为模块之间的通信的。在使用了Pub/Sub之后,模块之间的通信就会是直接的通信,这样就能使结构变得清晰。


PS:这种机制在angularjs中是集成的,angularjs中功能更全。


下面的代码可以直接集成到自己的项目中,也可以稍加改造:

varevents=(function(){
vartopics={};

return{
//接收
subscribe:function(topic,listener){
//首先从要接收的地方获取标示,在topics中生成队列
if(!topics[topic])topics[topic]={queue:[]};

//将监听器放到队列中
varindex=topics[topic].queue.push(listener)-1;
	
//提供一个用于移除的函数
return{
remove:function(){
deletetopics[topic].queue[index];
}
};
},//推送
publish:function(topic,info){
//如果没有要接收的地方,那么就不用推送了
if(!topics[topic]||!topics[topic].queue.length)return;

//挨个执行接收函数,如果没有要传的信息,那么就传一个空对象
varitems=topics[topic].queue;
items.forEach(function(item){
	item(info||{});
});
}
};
})();


当要推送一个消息的时候:

events.publish('/page/load',{
url:'/some/url/path'//发送的信息
});

一个参数是标示,也可以说是订阅号。

接收的方式是这样的:

varsubscription=events.subscribe('/page/load',function(obj){	
//处理获得的信息
});

//也可以使用remove来取消接收
subscription.remove();

根据标示来监听数据

via:http://davidwalsh.name/pubsub-javascript

相关文章

IE6是一个非常老旧的网页浏览器,虽然现在很少人再使用它,但...
PHP中的count()函数是用来计算数组或容器中元素的个数。这个...
使用 AJAX(Asynchronous JavaScript and XML)技术可以在不...
Ajax(Asynchronous JavaScript and XML)是一种用于改进网页...
本文将介绍如何通过AJAX下载Excel文件流。通过AJAX,我们可以...
Ajax是一种用于客户端和服务器之间的异步通信技术。通过Ajax...