我花了大今天思索這個在被宣佈的路線。我正在處理兩個應用程序 - 一個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