Backbonejs:组织路线

时间:2013-02-07 06:41:13

标签: javascript backbone.js code-organization backbone-routing

如果路线内有太多路线,你如何组织你的路线对象,让我们说一百个。你只是把它放在一个文件或对象中吗?

感谢。

2 个答案:

答案 0 :(得分:2)

我认为这里没有正确或错误的答案。绝对正确的是,你不能拥有一条拥有50多条路线的路由器......这是一个可维护性的噩梦。

相反,我更喜欢将我的应用程序拆分为子应用程序或模块(根据需要调用它们),其中每个应用程序都有明确的目的和责任。因此,在假设的订单管理系统中我可能有

  • 订购mgmt app
    • 人app
      • router.js
      • app.js
      • ...
    • 订购应用
      • router.js
      • app.js
      • ...
    • ...
    • globalrouter.js
    • globalapp.js

这里的关键只是永远不会创建一个巨大的app / monolith,而是创建许多小应用程序,它们可以组合在一起形成整个应用程序(与每个应用程序之间的事件进行通信)。也就是说,在上面的例子中,“人”以及“订单”应用程序都有自己的路由器,它们只保存与它们相关的路由。 “全局”应用程序构成了粘合剂,将所有单个应用程序保持在一起,例如具有应用程序菜单,也可能是一些通用路径,而不是特定模块/子应用程序。

也许Backbone Aura是一个很好的起点。

答案 1 :(得分:1)

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

如何定义模块取决于您的应用程序,但一般的经验法则是您将功能组合在一个“功能”或主题下。

例如,假设您的应用程序是一个基本的“公司”应用程序(使用Backbone.js的错误示例,但让我们保持简单。)该网站有几个部分:“关于我们”,“产品”,“客户端“,”支持“,”博客“,”职业“。在每个部分中,它有2级子页面(例如,在产品中,您可以有一个产品列表,在每个产品中,您可以深入查看产品的更详细视图,如何购买产品,等等。)

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

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

通过这样做,您还可以将代码分解为不同的模块,甚至可以保持每个模块的视图,模板和模型分离。