2012-10-03 39 views
4

我想路由器重定向到最後狀態的用戶在Emberjs:重定向到最後狀態的用戶在使用路由器

什麼是做到這一點的最好辦法?以某種方式可以在路由器中使用redirectTo?

下面是一個例子。假設有一個職位的兩個主要途徑,showedit

App.Router = Ember.Router.extend({ 

    post: Ember.Route.extend({   
     route: '/:post', 

     show: Ember.Route.extend({ 
      route: '/', 
      connectOutlets: function(router, context) { 
       router.get('applicationController').connectOutlet("showPost", post); 
      } 
     }), 

     edit: Ember.Route.extend({ 
      route: '/edit', 
      connectOutlets: function(router, context) { 
       router.get('applicationController').connectOutlet("editPost", post); 
      } 
     }) 

    }) 
    }) 

現在是,我想這樣做:

post: Ember.Route.extend({ 
     initialState: 'edit', 
     route: '/:post', 
     redirectTo: function(router) { 
      router.transitionTo(router.currentState.name) 
     }.property() 
    }) 

其他併發症: 的redirectTo是針對特定的崗位即後/ 3可以默認爲edit,但後/ 4可以默認爲show,這取決於它們的最後各自的狀態。

我猜測另一種方法是通過使用擁有它自己的stateManager的父控制器/視圖,並導航到適當的子視圖。如果這是首選的方法,那麼爲此使用路由器有什麼問題?

任何清晰的這裏是非常感謝!

回答

0

在每個路徑轉換中,您都可以將最後一條路徑存儲在cookie中。您可以通過使所有路由從一個抽象路由對象繼承並將代碼添加到willTransition操作掛鉤中來實現。

然後,只需在主索引路徑上添加一些代碼,即從Cookie加載數據並轉換到保存的路徑即可。

確保您記錄了燼路由名稱,而不僅僅是URL和任何關聯的無關數據。

如果你要還處理保存狀態(即未完成的記錄更新等),那麼你可能需要使用本地存儲來存儲未完成的編輯等

在過去,當我已經處理了這樣的事情,進入半無限循環非常容易,所以我一定要確保你給他們選擇恢復或其他東西,而不是自動進行。