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

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

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

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

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

var events = (function(){
  var topics = {};

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

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

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

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

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

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

接收的方式是这样的:

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

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

根据标示来监听数据

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

AJAX驱动的单页应用-Pub/Sub,布布扣,bubuko.com

时间: 2024-10-09 22:48:36

AJAX驱动的单页应用-Pub/Sub的相关文章

OpenCart 2.x Ajax单页结账扩充功能

该插件下载地址: http://www.opencartchina.com/extension281.html 或 http://www.chinaopencart.cn/index.php?route=product/product&path=79&product_id=977 安装: 1. 下载后文档名称为cny_ajax_one_page_checkout.ocmod.zip; 2. 登录网站后台,选择[扩展功能]->[安装扩展功能]->[上传], 选择文件cny_aja

单页web应用(SPA)的简单介绍

单页 Web 应用 (single-page application 简称为 SPA) 是一种特殊的 Web 应用.它将所有的活动局限于一个Web页面中,仅在该Web页面初始化时加载相应的HTML.JavaScript 和 CSS.一旦页面加载完成了,SPA不会因为用户的操作而进行页面的重新加载或跳转.而是利用 JavaScript 动态的变换HTML的内(采用的是div切换显示和隐藏),从而实现UI与用户的交互.由于避免了页面的重新加载,SPA 可以提供较为流畅的用户体验.得益于ajax,我们

jQuery 单页无刷新插件

现在很多网站都使用了单页无刷新效果,这里自己也封装了一个类似 PJAX 的jquery插件(支持浏览器前进后退按钮及url地址更改不跳转),方便以后在项目中应用或参考,在测试的时候注意自己的本地路径,这里采用了ajax所以不能直接点击打开,必须得在本地服务器下执行: 文件目录: index.html 为首页展示页: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8

单页应用SEO浅谈

单页应用SEO浅谈 前言 单页应用(Single Page Application)越来越受web开发者欢迎,单页应用的体验可以模拟原生应用,一次开发,多端兼容.单页应用并不是一个全新发明的技术,而是随着互联网的发展,满足用户体验的一种综合技术. SEO 一直以来,搜索引擎优化(SEO)是开发者容易忽略的部分.SEO是针对搜索(Google.百度.雅虎搜索等)在技术细节上的优化,例如语义.搜索关键词与内容相关性.收录量.搜索排名等.SEO也是同行.市场竞争常用的的营销手段.Google.百度的搜

Vue单页式应用(Hash模式下)实现微信分享

前端微信分享的基本步骤: 一.绑定域名: 先登录微信公众平台进入"公众号设置"的"功能设置"里填写"JS接口安全域名".这个不多说,微信开发的都应该清楚. 二.引入js文件: 在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.0.0.js.请注意,如果你的页面启用了https,务必引入 https://res.wx.qq.com/open/js/jweixi

单页应用 SPA(Sigle Page Aolication)

单页应用 SPA(Sigle Page Aolication) 优点: 1.具有桌面应用的即时性.网站的可移植性和可访问性. 2.用户体验好.快,内容的改变不需要重新加载整个页面,web应用更具响应性和更令人着迷. 3.基于上面一点,SPA相对对服务器压力小. 4.良好的前后端分离.SPA和RESTful架构一起使用,后端不再负责模板渲染.输出页面工作,web前端和各种移动终端地位对等,后端API通用化. 缺点: 1.不利于SEO. 2.初次加载耗时相对增多. 3.导航不可用,如果一定要导航需要

Singal Page App:使用Knockout和RequireJS创建高度模块化的单页应用引擎

开篇扯淡 距离上一篇文章已经有好几个月,也不是没有时间记录点东西,主要是换了新的工作,在一家外资工作,目前的工作内容大多都是前端开发,新接触的东西因为时间原因,大多还不成体系,所以这么长时间什么都没记录下来,也正是因为新的工作内容,才有了今天这篇文章. 这篇文章是我自己的博客项目的前端重写,因为目前ASP.NET API和单页应用的流行,结合目前工作中用到的东西,我决定把我的博客项目的前端部分整个重写,(以前的就是一坨-) 步入正题 背景知识 RequireJS http://www.requi

【单页应用】view与model相关梳理

前情回顾 根据之前的学习,我们形成了一个view与一个messageCenterview这块来说又内建了一套mvc的东西,我们这里来理一下首先View一层由三部分组成:① view② dataAdpter③ viewController view一块两个重要数据是模板以及对应data,一个状态机status这里view只负责根据状态取出对应的模板,而后根据传入的数据返回组装好的html这里一个view多种状态是什么意思呢?比如我有一个组件,但是里面有一圈数据是需要Ajax请求的,所以我的view

simple-spa 一个简单的单页应用实例

上两篇文章说过要写一个简单的单页应用例子的, 迟迟没有兑诺, 实在有愧 哈哈.这篇写给小白用户哈. 正好趁今天风和日丽,事情不多, 把从项目里的代码扣取了一下, 整理了一个简单的例子.因为我们生产项目用到es6 还有构建工具,为了让例子足够简单和原生,除了一个zepto,连require都是我之前写的文章里的实现的,很简单70行代码. 事例地址 github:https://github.com/skyweaver213/simple-spa demo: https://skyweaver213