是的,絕對有。在我們的應用程序中,我們使每個頂層路線(術語鬆散地使用)都是在其自己的文件中的一個單獨的類。我們有一個名爲「州」的目錄,這些文件位於這裏。我發現這使得它更易讀,更易於測試。
例如:
// file: states/blog_posts.js
App.BlogPostsState = Ember.Route.extend({
route: '/posts',
/* .... */
});
// file: states/search_results.js
App.SearchResultsState = Ember.Route.extend({
route: '/search',
/* .... */
});
// file: states/router.js
App.Router = Em.Router.extend({
blogPosts: App.BlogPostsState.extend(),
searchResults: App.SearchResultsState.extend(),
/* .... */
});
我什麼代碼正在被複制粘貼一遍又一遍不清楚。通常,如果我發現這種情況,我會嘗試將該代碼隔離到一個mixin中,但這並非易事,尤其是在路由器/狀態圖中。
有一件事可能是相關的,我不知道你是否意識到,但事件會遍歷狀態hiercharchy,所以每個葉狀態不一定需要重新實現相同的事件處理。
在此示例中,名爲「showAlpha」的「動作」或「事件處理程序」在所有三種狀態/路徑位置(alpha,beta,delta)中都有效。這消除了多次重新實現同一事物的需要。
App.Router = Ember.Router.extend({
showAlpha: Ember.State.transitionTo('alpha'),
alpha: Em.Route.extend({
route: '/alpha'
}),
beta: EM.Route.extend({
route: '/beta'
}),
delta: Ember.Route.extend({
route: '/delta'
})
});
我希望有幫助。我不確定這是否覆蓋了您一遍又一遍地複製粘貼的代碼。
看看http://stackoverflow.com/a/11637906/65542 – pangratz 2012-07-25 06:29:09
對於分裂,正確的,這不是一個問題。但是對於冗長和複製粘貼,通過走路通過我們的路由器,我並沒有設計出這種模式,因爲在每個路由中都完成了特定的工作。但是對於簡單的路線,可能會有一種傳統的方式來處理您的情況,根據名稱可以創建路線並連接適當的出口等等。不知道這是一個好主意...... – 2012-07-25 07:28:16
看看在這裏簡報的插件架構也看看http://stackoverflow.com/questions/11391333/emberjs-develop-a-component-in-isolation-with-its-own-routing -states-which-can – sabithpocker 2012-07-25 08:39:26