熟悉 Backbone(三) : 什么是 Router

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 
});

参考

http://backbonetutorials.com/what-is-a-router/#/posts/120

    原文作者:StephenLee
    原文地址: https://segmentfault.com/a/1190000000470427
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞