我花了大今天思索这个在被宣布的路线。我正在处理两个应用程序 - 一个ExtJS4驱动的应用程序和一个Backbone驱动的应用程序。在这两种情况下,他们都是单页面应用程序 - 用户不会离开页面,因此他们可以“暂停”他们正在做什么或想要对另一个兴趣点作出反应。路由在配置正在申报VS由自己控制
在ExtJS4情况下,我使用的是一种土生土长的航线系统,其中,当应用程序启动时,它要求所有的控制器,“你回应什么路线?”。据我所知,这有几个优点 -
- 路由在控制器上定义,所以删除控制器,不需要更新配置文件。
- 应用程序更容易添加控制器,它似乎让它变得更加模块化。
- 改变路线,或参数不需要申请变更,只控制器(而且由于控制器内部处理的路线,这是很好的限制)。
问题是,我还没有看到任何框架或应用程序到目前为止,做这样的事情。我不知道为什么 - 这是一种非常糟糕的做法,它不会将其变为生产环境?或者我只是没有在使用它的项目上工作..?基于Backbone的应用程序基于一些疯狂的hackjob代码,所以今天我使用相同的基本格式重写了大部分代码。它极大地降低了代码的复杂性,导致我怀疑这是不是真正的情况。
的伪代码:
controller
routes: ['/bookmarks', '/bookmarks/(:action)/(:id)', '/bookmarks/(:action)']
init: fn()
this.application.registerRoutes(this.routes, this);
//other code to set up views and such
routeHandler: fn (route, params)
//tells the application to switch the visible stuff to this thing's
//main view, declared elsewhere
this.application.showView(this.view)
switch(params.action)
case "edit":
//some internal stuff to show the editing field for the ID passed..
this.showEditor();
this.loadRecordById(params.id)
case "new":
//some internal stuff
this.showEditor();
所以,我想的问题是:“这是不好的做法,为什么如果不是,为什么不是这个在其他地方使用过于困难或乱设置了?其他语言?你能预见一些事情会在管道后面发生吗?“
谢谢。
编辑: 昨晚我认识的几个缺点 -
- 注册的所有可能的途径,需要所有控制器的启动。但是,即使那样(特别是对于JS),还有一个简单的方法。
- 如果我想换一个路线,我必须追查管理该特定路由控制器。当然,如果我的路线被适当命名,这应该不是问题。
- 追踪别名路线很困难 - 即/ marketing_page的确是/ pages/3 ..但这不是应用程序的工作方式,所以在这种情况下,这是一个有争议的问题。
这就是为什么做一个唯一的程序员有时真的不是最好的方式去。输入互联网后不超过几个小时,我意识到存在问题,然后您确认。 – Stephen 2012-02-08 19:15:14
这就是我们在这里! :d – Domenic 2012-02-08 19:25:32