2

这是我在 BackboneJS 应用程序中的路由对象:

       routes: {
            ""               : "_navigate",
            "home"           : "_navigate",
            "blog"           : "_navigate",
            "photos"         : "_navigate",
            "notes"          : "_navigate",
            "about"          : "_navigate",
            "singlepost_:id" : "_navigate"
        },

它将路由重定向到该_navigate方法,如下所示:

        _navigate: function(postId) {
            if (postId) {
               // show single entry
               return;
            }

            // show regular entry
        },

它工作得很好。但是,我发现重复的路线对象很烦人。

我的问题是:有没有更好的方法可以将所有这些路线引导到相同的方法而不会重复太多?

谢谢!

4

2 回答 2

2

http://backbonetutorials.com/what-is-a-router/查看关于 splats 的部分

路由定义中的任何“*splats”或“:params”都作为参数(按相应顺序)传递给相关函数。定义为“/:route/:action”的路由将传递 2 个变量(“route”和“action”)给回调函数。(如果这令人困惑,请发表评论,我会尝试更好地表达它)这里有一些使用“:params”和“*splats”的例子

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>

    },

    getPost: function( id ){ 
        alert(id); // 121 
    },
    downloadFile: function( path ){ 
        alert(path); // user/images/hey.gif 
    },
    loadView: function( route, action ){ 
        alert(route + "_" + action); // dashboard_graph 
    }
于 2012-05-27T12:25:51.567 回答
1

很简单,真的。

        routes: {
            "*actions:_id": "_navigate"
        }

感谢 BackboneJS Google Group 的 Jason Strimpel。

于 2012-05-27T08:17:28.553 回答