一、应用场景
监听浏览器地址栏URL的hash值(#后面的部分)的变化,用正则匹配出参数执行相应的JS方法。URL地址的hash部分充当业务逻辑的分发单位。
示例:
<!DOCTYPE html> 
<html> 
<head> 
<title>the5fire-backbone-router</title> 
</head> 
<body> 
<a href="#/posts/120">Post 120</a> 
<a href="#/download/user/images/hey.gif">download gif</a> 
<a href="#/dashboard/graph">Load Route/Action View</a> 
</body> 
<script src="http://backbonejs.org/test/vendor/jquery.js"></script> 
<script src="http://backbonejs.org/test/vendor/underscore.js"></script> 
<script src="http://documentcloud.github.com/backbone/backbone-min.js"></script> 
<script> 
(function ($) { 
//Backbone中的router,见名知意,router有路由的意思,显然这里是要控制url的。 
//Backbone.Router会把你连接中的#标签当做是url路径 
//从上面已经可以看到匹配#标签之后内容的方法,有两种: 
//一种是用“:”来把#后面的对应的位置作为参数;还有一种是“*”,它可以匹配所有的url,下面再来演练一下。 
var AppRouter = Backbone.Router.extend({ 
routes: { 
"posts/:id" : "getPost", 
"download/*path": "downloadFile", //对应的链接为<a href="#/download/user/images/hey.gif">download gif</a> 
":route/:action": "loadView", //对应的链接为<a href="#/dashboard/graph">Load Route/Action View</a> 
"*actions" : "defaultRoute" 
}, 
getPost: function(id) { 
alert(id); 
}, 
defaultRoute : function(actions){ 
alert(actions); 
}, 
downloadFile: function( path ){ 
alert(path); // user/images/hey.gif 
}, 
loadView: function( route, action ){ 
alert(route + "_" + action); // dashboard_graph 

});

var app_router = new AppRouter;

Backbone.history.start();

})(jQuery); 
</script> 
</html>

 
 
二、构造函数
构造函数交简单,唯一需要注意的是this._bindRoutes()
将你自定义的routes中的键值对传入方法this.route
可以大胆猜测,Backbone.history.route方法其实是将正则(键被转化成了正则表达式),正则对应的回调添加到一个数组中。当hash值变化时取当前的hash值循环数组找到与正则对应的回调并执行。这个回调就是我们自定义的routes对象的值:
 
看代码Backbone.history.route:
 
二、Router的核心问题是:如何监听URL hash值的变化?查看History.prototype上的start方法:
先判断浏览器是否原生支持事件:popsatte、hashchange,如果不支持则使用定时间setInterval循环执行方法:checkUrl,事件间隔interval为50毫秒。可见低版本的浏览器要实现Router的功能是有性能损耗的。如果你的应用需要兼容低版本的浏览器,慎用Router
 
三、checkUrl方法。
handler.callback就是我们调用Backbone.history.route方法添加到handlers数组中的对象的callback属性:
 
关于浏览器监听hash值变化的原生方法可戳这里:

Router模块的更多相关文章

  1. Node.js -- Router模块中有一个param方法

    这段时间一直有在看Express框架的API,最近刚看到Router,以下是我认为需要注意的地方: Router模块中有一个param方法,刚开始看得有点模糊,官网大概是这么描述的: 1 Map lo ...

  2. express源码剖析--Router模块

    1.加载模块执行代码: methods.forEach(function(method){ //method是http协议的各种请求方法,如:get,put,headee,post Route.pro ...

  3. .7-浅析express源码之Router模块(3)-app[METHODS]

    之前的讨论都局限于use方法,所有方式的请求会被通过,这一节讨论express内部如何处理特殊请求方法. 给个流程图咯~ 分别给出app.METHODS与router.METHODS: // app. ...

  4. .6-浅析express源码之Router模块(2)-router.use

    这一节继续深入Router模块,首先从最常用的use开始. router.use 方法源码如下: proto.use = function use(fn) { var offset = 0; var ...

  5. 联发科Mediatek工业路由芯片上网稳定低功耗的Router模块WiFi中继——无线AP定制方案

    Router模块又名路由器模块,是指将路由器的接口类型及部分扩展功能是可以根据实际需求来进行无线接入服务,允许其他无线设备接入,通过局域无线端或联网远程端,进行数据访问,对无线设备进行远程控制.常见的 ...

  6. .5-浅析express源码之Router模块(1)-默认中间件

    模块application已经完结,开始讲Router路由部分. 切入口仍然在application模块中,方法就是那个随处可见的lazyrouter. 基本上除了初始化init方法,其余的app.u ...

  7. angularJS中的ui-router和ng-grid模块

    关于angular的教程,学习了一下angular的ui-router和ng-grid这两个模块,顺便模仿着做了一个小小的东西. 代码已经上传到github上,地址在这里https://github. ...

  8. Backbone源码解析(五):Route和History(路由)模块

    今天是四月十二号,距离上次写博已经将近二十天了.一直忙于工作,回家被看书的时间占用了.连续两个礼拜被频繁的足球篮球以及各种体育运动弄的精疲力竭,所以很少抽时间来写技术博客.今天抽出时间把backbon ...

  9. 用avalon实现一个完整的todomvc(带router)

    照着todomvc官网的例子,做了一个avalon版的todos,功能全都有了,而且加了router模块,比司徒大大写的都完善(≧▽≦)/~ js文件整整100行,初次使用avalon,书写过程中绕了 ...

随机推荐

  1. Windchill 查询功能

    一.使用SearchCondition 查询语句中用容器中的containerReference.key.id名称来代替数据库中的字段idA3containerReference /**      * ...

  2. 从PCD文件中读取点云数据

    博客转载自:http://www.pclcn.org/study/shownews.php?lang=cn&id=84 在本小节我们学习如何从PCD文件中读取点云数据. 代码 章例1文件夹中, ...

  3. R语言:文本(字符串)处理与正则表达式

    R语言:文本(字符串)处理与正则表达式 (2014-03-27 16:40:44) 转载▼ 标签: 教育 分类: R 处理文本是每一种计算机语言都应该具备的功能,但不是每一种语言都侧重于处理文本.R语 ...

  4. Google浏览器插件

    Scholarscope XPath Helper Web Scraper JSON-handle  User-Agent Swicher  Markdown Here

  5. Entity Framework Code-First(6):Database Initialization

    Database Initialization: We have seen that Code First creates a database automatically in the Simple ...

  6. Mathematics Base - 期望、方差、协方差、相关系数总结

    参考:<深度学习500问> 期望 ​在概率论和统计学中,数学期望(或均值,亦简称期望)是试验中每次可能结果的概率乘以其结果的总和.它反映随机变量平均取值的大小. 线性运算: \(E(ax+ ...

  7. Note: Migratory Compression: Coarse-grained Data Reordering to Improve Compressibility

    思路/方法 设计了Migratory Compression. 调整chunk相对位置,将相似chunk排列在一起,通过压缩来减少data store占用的实际存储空间. https://en.wik ...

  8. ZOJ 2849【瞎暴力的搜索】

    思路: 靠评测机抖一抖的思路: 拿个队列维护一下符合类型的可以搜索(指四周还存在可以遍历的点)的点.然后暴力搜索,所以问题来了,这个暴力搜索会大大地重复遍历次数. DFS遍历图以前一直忽略重复,以为搜 ...

  9. bzoj2502: 清理雪道(有源汇有上下界最小流)

    传送门 别说话,自己看,我不会->这里 我这里用的建图方法是先跑一次最大流,连上$(t,s,inf)$之后再跑一遍,然后答案就是之前连的那条边的反向边的流量 据说还有种方法是连上$(t,s,in ...

  10. winform中的Datagridview控件与List同步修改

    Winform的datagridview是个很强大的控件,可用datatable, List等型的数据与之绑定显示. 可惜的是,绑定的LIst不能同步更新. 估计是为了改进List不能同步更新的问题, ...