使用backbone的history管理SPA应用的url
本文介绍如何使用backbone的history模块实现SPA应用里面的URL管理。SPA应用的核心在于使用无刷新的方式更改url,从而引发页面内容的改变。从实现上来看,url的管理和页面内容的管理是其中的两个难点。就url的管理而言,主要有以下三方面的要求:
1)对于要采用单页跳转的链接,不能有页面刷新;
2)浏览器的前进和后退,都能像多页应用那样,显示之前访问地址对应的内容;
3)应用处于任何一个单页链接地址时,当用户刷新,依然能初始化显示该地址对应的内容。
假如要自己来实现一个能够满足以上三方面要求的功能,思路有2种。
第一种是利用锚点链接及hashchange,将所有单页链接地址全部配置成锚点链接的形式,然后在hashchange事件里面,根据页面当前的锚点值,执行不同的回调函数,用于更改页面内容。这个思路在上一篇博客中《理解浏览器历史记录(2)-hashchange、pushState》给出了一个简单的实现(demo),代码虽然比较简陋,但是也说明思路是可行的。
第二种是利用pushState,详细步骤如下:
1)在点击链接的时候,如果这个链接是单页形式的链接,可通过pushState或者replaceState的方式来改变url;由于pushState跟replaceState并不会触发popstate事件,所以在必要的条件下,还得在调用完pushState和replaceState调用完后,手动调用相应的回调函数;
2)监听浏览器的popstate事件,这样就能响应浏览器前进后退的操作,然后根据操作后的页面地址找到对应的回调函数执行;
3)页面初始化时,直接根据当前地址执行对应的回调函数即可。
上次也没有给出简单使用pushState实现SPA的例子,这次补上,功能与hashchange那个类似,就是写法稍微有点不同而已。demo地址(不可测刷新操作,如果使用pushState,单页地址刷新会报404,需在后台处理才能解决,此处毕竟只是个静态页):
http://liuyunzhuge.github.io/blog/pushState/demo7.html
延伸阅读
- ssh框架 2016-09-30
- 阿里移动安全 [无线安全]玩转无线电——不安全的蓝牙锁 2017-07-26
- 消息队列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 论文笔记【图片目标分割】 2017-07-26
- 词向量-LRWE模型-更好地识别反义词同义词 2017-07-26
- 从栈不平衡问题 理解 calling convention 2017-07-26
- php imagemagick 处理 图片剪切、压缩、合并、插入文本、背景色透明 2017-07-26
- Swift实现JSON转Model - HandyJSON使用讲解 2017-07-26
- 阿里移动安全 Android端恶意锁屏勒索应用分析 2017-07-26
- 集合结合数据结构来看看(二) 2017-07-26
学习是年轻人改变自己的最好方式