BackboneJs中的多个路由器与单个路由器

And*_*rle 45 javascript architecture router backbone.js

Backbone上我看到的所有例子都使用了一个路由器用于整个应用程序,但是对于你的应用程序的每个部分(页眉,页脚,舞台,侧边栏)都有一个路由器是不是有意义?有没有人用多个路由器构建应用程序,您有什么经历?

让我们考虑一个具有嵌套视图的复杂应用程序:当一个视图有自己的处理子视图显示的路由器,而不是让一个大型路由器必须通知主视图更改其子视图时,这不是更好吗?

这个问题的背景:我看到骨干网中的路由器和GWT中的ActivityMapper有很多相似之处.ActivityMapper仅负责为DOM中的给定路径和给定容器获取正确的演示者.

San*_*der 23

我写了一个应用程序(仍在写),里面有多个路由器.但是它不像你想的那样,它更基于模块而不是每个视图的路由器或类似的东西.

例如,假设我的应用程序中有两个大模块,1个处理所有书籍,1个用户.书籍有多个视图(用户也是如此),列表视图,详细视图,编辑视图等...所以每个模块都有自己的路由器,代表它自己的一组URL:

// user module...
var userRouter = Backbone.Router.extend({
    routes: {
        "users": "loadUsers",
        "users/add": "addUser",
        "user/:id": "loadUser",
        "user/:id/edit": "editUser"
    }

// ... rest dropped to save the trees (you never know if someone prints this out)
});


// book module
var bookRouter = Backbone.Router.extend({
    routes: {
        "books": "loadBooks",
        "books/add": "addBook",
        "book/:name": "loadBook",
        "book/:name/edit": "editBook"
    }

// ... rest dropped to save the trees (you never know if someone prints this out)
});
Run Code Online (Sandbox Code Playgroud)

所以,它不像我的两个路由器竞争相同的路由,它们各自处理自己的一组路由.

现在编辑我通过Elf Sternberg获得更多信息,我知道默认情况下不可能在同一路线上有多个路由器匹配.没有像覆盖骨干历史或在路由和正则表达式中使用命名空间来匹配这些路由的解决方法.更多信息:多个匹配的路线 感谢Elf Sternberg的链接.


Dav*_*der 22

我刚刚写了一篇关于Backbone中特定于模块的子路由的博客文章,它允许定义一个"子路由",它注意该路由的前缀之后的所有内容.

查看博客文章以获取更多说明:http://www.geekdave.com/?p = 13

这意味着您不必一遍又一遍地冗余地定义相同的前缀,并且您还可以在访问模块时延迟加载子路由.反馈是最受欢迎的!

  • 如果没有外部链接,您的答案将无法提供足够的信息,即使您的博客文章质量很高,也无法提供开箱即用的答案.你应该真的包括一个片段和一些解释,以便随时间提供答案.非常感谢您抽出宝贵时间提供帮助. (2认同)