Backbone
中的 Router
充任路由的作用,掌握 URL
的走向,当在 URL
中运用 #
标签时见效。
定义 Router
最少须要一个 Router
和一个函数来映照特定的 URL
,而且我们须要记着,在 Backbone
中,#
标签后的恣意字符都会被 Router
吸收并诠释。
下面我们来定义一个 Router
:
<script>
var AppRouter = Backbone.Router.extend({
routes: {
"*actions": "defaultRoute" // 婚配 http://example.com/#anything-here
}
});
// 实例化 Router
var app_router = new AppRouter;
app_router.on('route:defaultRoute', function(actions) {
alert(actions);
})
// 翻开 Backbone 的历史记录
Backbone.history.start();
</script>
如今,我们就定义好了一个 Router
了,但此时 Router
并未婚配特定的 URL
,接下来我们最先细致解说 Router
是怎样事情的。
动态路由挑选
Backbone
许可你定义带有特定参数的 Router
。比方,你能够愿望经由过程一个特定的 id
吸收一个 post
,比方如许一个 URL:"http://example.com/#/posts/12"
,一旦这个 Router
被激活,你就能够获得一个 id
为12的 post
。接下来,我们就来定义这个 Router:
<script>
var AppRouter = Backbone.Router.extend({
routes: {
"posts/:id": "getPost",
"*actions": "defaultRoute" //Backbone 会依据递次婚配路由
}
});
// 实例化 Router
var app_router = new AppRouter;
app_router.on('route:getPost', function (id) {
// 注重,参数经由过程这里举行通报
alert( "Get post number " + id );
});
app_router.on('route:defaultRoute', function (actions) {
alert( actions );
});
// 翻开 Backbone 的历史记录
Backbone.history.start();
</script>
婚配划定规矩
Backbone
运用两种情势的变量来设置 Router
的婚配划定规矩。第一种是 :
,它能够婚配 URL 中斜杠之间的恣意参数,另一种是 *
,它用来婚配斜杠背面的一切部份。注重,因为第二种情势的隐约性大于第一种,所以它的婚配优先级最低。
任一情势婚配的效果会以参数的情势通报到相干的函数中,第一种划定规矩能够返回一个或多个参数,第二种划定规矩将全部婚配效果作为一个参数返回。
接下来,我们用实例来申明:
routes:{
"posts/:id": "getPost",
// <a href="http://example.com/#/posts/121">Example</a>
"download/*path": "downloadFile",
// <a href="http://example.com/#/download/user/images/hey.gif">Download</a>
":route/:action": "loadView",
// <a href="http://example.com/#/dashboard/graph">Load Route/Action View</a>
},
app_router.on('route:getPost', function( id ){
alert(id); // 婚配后,通报过来的参数为 12
});
app_router.on('route:downloadFile', function( path ){
alert(path); // 婚配后,全部婚配效果作为一个参数返回,途径为 user/images/hey.gif
});
app_router.on('route:loadView', function( route, action ){
alert(route + "_" + action); // 婚配后,通报过来两个参数,此时会弹出 dashboard_graph
});