0

如果你的路由对象里面有太多的路由,比如说,你会怎么组织你的路由对象。你只是把它放在单个文件或对象?Backbonejs:组织路线

谢谢。

+0

你确定你真的需要一百吗?听起来好像在路线的定义中可能有些问题。也许你可以定义模板路线,从而减少你拥有的路线数量:http://backbonejs.org/#Router – Juri

+0

这只是一个例子,请注意这些是静态和动态路线的结合,好吧,也许我们只是减少它到50.那你怎么组织你的路线呢?现在我认为我已经有超过20条路线了(dyanamic和静态路线),并且我把它放在一个文件/路线对象中看起来很乱。 – Barry

+0

您可以拥有尽可能多的路由器,您如何组织它们取决于您。 –

回答

2

我认为这里没有正确或错误的答案。绝对正确的是,你不能拥有一台拥有50多个路由的路由器......这是一个可维护性的噩梦。相反,我更愿意将我的应用程序分成子应用程序或模块(按需要调用它们),其中每个应用程序或模块都有明确的目的和责任。因此,在一个假设的订单管理系统,我想可能有

  • 为了MGMT应用
    • 人应用
      • router.js
      • app.js
      • ...
    • order app
      • 个router.js
      • app.js
      • ...
    • ...
    • globalrouter.js
    • globalapp.js

这里的关键是只是为了永远不要创建一个巨大的应用程序/庞然大物,而是创建许多小应用程序,它们可以组合在一起形成整个应用程序(commu在他们每个人之间进行事件处理)。也就是说,在上面的例子中,“人”以及“订单”应用程序都有自己的路由器,它们只保存与其相关的路由。 “全球”应用程序形成胶水,将所有单个应用程序放在一起,例如具有应用程序菜单,也可能是一些通用路线,对特定的模块/子应用程序并不严格。

也许Backbone Aura是一个很好的开始。

+0

我做同样的事情。创建子应用程序,每个都有自己的路由器,这对于扩展您的应用程序非常重要。 –

+0

这实际上是我的架构,只有每个模块上没有路由器,谢谢好主意:) – Barry

1

您可以将路由器分解为多个文件。如何分解它取决于你的用例,并且在我的应用程序中,我们按模块分解它。

如何定义一个模块取决于您的应用程序,但一般的经验法则是您将一个“功能”或主题下的功能组合在一起。例如,假设您的应用程序是一个基本的“公司”应用程序(使用Backbone.js的不好的例子,但让我们保持简单。)该网站有几个部分:“关于我们”,“产品”,“客户“,”支持“,”博客“,”职业“。在每个部分中,它有两级子页面(就像在产品中一样,您可以拥有产品列表,并且在每个产品中,您可以深入查看产品,了解如何购买产品,等等)

每个部分,在这个例子中,我们可以把它们当作模块。并且,基于此,您可以将包含所有路由的单个路由器分解为不同的路由器。 (他们当然可以在不同的文件!)

var MainRouter = Backbone.Router.extend({ 
    routes: { 
    '/': 'home' 
    }, 
    home: function() { 
    // Display home view 
    } 
}); 

var ProductRouter = Backbone.Router.extend({ 
    routes: { 
    '/product': 'listProducts', 
    '/product/:id/buy': 'buyProduct', 
    '/product/:id': 'viewProduct', 
    '/product/compare/:id1/:id2': 'compareProduct' 
    }, 
    listProducts: function() { ... }, 
    buyProduct: function(id) { ... } 
    viewProduct: function(id) { ... } 
    compareProduct: function(id1, id2) { ... } 
}); 

当你启动应用程序,你只需要启动他们都:

$(function() { 
    new MainRouter(); 
    new ProductRouter(); 
}); 

通过这样做,你也可以向下打破你的代码转换成不同的模块,甚至可以保留意见,模板和模型按模块分开。