Backbone.Router(路由)/ Backbone.history(历史)css
Backbone.Router 为客户端路由提供了许多方法,并能链接到指定的动做(actions)和事件(events)。 对于不支持 History API 的旧浏览器,路由提供了优雅的回调函数并能够透明的进行 URL 片断的转换。 正则表达式
页面加载期间,当应用已经建立了全部的路由,须要调用 Backbone.history.start(),或Backbone.history.start({pushState: true}) 来确保驱动初始化 URL 的路由。想要中止监听URL的路由,使用 Backbone.history.stop().
浏览器
History 做为全局路由服务用于处理 hashchange 事件或 pushState,匹配适合的路由,并触发回调函数。 咱们不须要本身去作这些事情 — 若是使用带有键值对的 路由,Backbone.history 会被自动建立。函数
<div> <a href="#help">help</a> <a href="#search/list">list</a> <a href="#search/list/p6">list page6</a> <a href="#file/image/logo.png">image logo</a> <a href="#account/total">account total</a> </div>
//action方式绑定URL var PageRoute = Backbone.Router.extend({ routes: { "help": "help", //1 #help "search/:query": "search", //2 #search/list "search/:query/p:page": "search", //3 #search/list/p6 "file/*path": "file", //4 #file/image/logo.png ":path/:action": "view" //5 #account/total }, help: function() { console.log('help') }, search: function(query, page) { console.log(query +'/'+ page) }, file: function(path){ console.log(path) }, view: function(path,action){ console.log(path +'/'+ action) } }); var route = new PageRoute(); Backbone.history.start(); //event方式绑定URL var PageRoute = Backbone.Router.extend({ routes: { "help": "help", //1 #help "search/:query": "search", //2 #search/list "search/:query/p:page": "search", //3 #search/list/p6 "file/*path": "file", //4 #file/image/logo.png ":path/:action": "view" //5 #account/total } }); var route = new PageRoute(); route.on('route:help',function(){ console.log('help') }); route.on('route:search',function(query,page){ console.log(query +'/'+ page) }); route.on('route:file',function(path){ console.log(path) }); route.on('route:view',function(path,action){ console.log(path +'/'+ action) }); Backbone.history.start();
route router.route(route, name, [callback])
动态修改URL的hash属性的匹配规则和动做函数。为路由对象手动建立路由,route 参数能够是 routing string(路由字符串) 或 正则表达式。 每一个捕捉到的被传入的路由或正则表达式,都将做为参数传入回调函数(callback)。 一旦路由匹配, name 参数会触发 "route:name" 事件。若是callback参数省略 router[name]将被用来代替。 后来添加的路由能够覆盖先前声明的路由。this
var PageRoute = Backbone.Router.extend({ routes: { "help": "help", //1 #help "search/:query": "search", //2 #search/list "search/:query/p:page": "search", //3 #search/list/p6 "file/*path": "file", //4 #file/image/logo.png ":path/:action": "view" //5 #account/total }, initialize: function () { this.route("help", 'help', function () { console.log('oo, help'); }); }, help: function() { console.log('help') }, search: function(query,page) { console.log(query +'/'+ page) }, file: function(path){ console.log(path) }, view: function(path,action){ console.log(path +'/'+ action) } }); var route = new PageRoute(); route.route("search/:query/p:page", 'search', function(query,page){ console.log('oo, '+ query +'/'+ page) }); Backbone.history.start();
navigate router.navigate(fragment, [options])
每当你达到你的应用的一个点时,你想保存为一个URL, 能够调用navigate以更新的URL。 若是您也想调用路由功能, 设置trigger选项设置为true。 无需在浏览器的历史记录建立条目来更新URL, 设置 replace选项设置为true。 spa
var PageRoute = Backbone.Router.extend({ routes: { "help": "help", //1 #help "search/:query": "search", //2 #search/list "search/:query/p:page": "search", //3 #search/list/p6 "file/*path": "file", //4 #file/image/logo.png ":path/:action": "view" //5 #account/total }, help: function() { console.log('help') }, search: function(query,page) { console.log(query +'/'+ page) }, file: function(path){ console.log(path) }, view: function(path,action){ console.log(path +'/'+ action) } }); var route = new PageRoute(); setTimeout(function(){ route.navigate("search/list/p5",{trigger: true}); },2000); setTimeout(function(){ route.navigate("help",{trigger: true}); },4000); Backbone.history.start();