4

我想将路由器重定向到用户所处的最后一个状态。

最好的方法是什么?是否可以在路由器中以某种方式使用 redirectTo ?

这是一个例子。假设一个帖子有两条主要路线,show并且edit

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 特定于给定的帖子,即 post/3 可能默认为edit,但 post/4 可能默认为show取决于它们最后各自的状态。

我猜另一种方法是使用具有自己的 stateManager 的父控制器/视图,并导航到适当的子视图。如果这是首选方法,那么为此使用路由器有什么问题?

非常感谢这里的任何清晰度!

4

1 回答 1

0

在每次路由转换时,您都可以将最后一条路由存储在 cookie 中。您可以通过使所有路由都继承自抽象路由对象并将代码添加到 willTransition 操作挂钩来做到这一点。

然后剩下的就是在主索引路由上添加一些代码,从 cookie 加载数据,然后转换到保存的路由。

确保记录 ember 路由名称,而不仅仅是 URL 和任何相关的无关数据。

如果您还要处理保存状态(即未完成的记录更新等),那么您可能希望使用本地存储来存储未完成的编辑等。

过去,当我处理此类事情时,很容易陷入半无限循环,因此我肯定会确保您为他们提供恢复选项或其他选项,而不是使其自动执行。

于 2014-04-24T10:03:15.687 回答