Emberjs:重定向到用户使用路由器的最后状态

时间:2012-10-03 00:04:00

标签: redirect ember.js state ember-old-router

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

最好的方法是什么?是否有可能以某种方式在路由器中使用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特定于给定帖子,即post / 3可能默认为edit,但post / 4可能默认为show,具体取决于其最后各自的状态。

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

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

1 个答案:

答案 0 :(得分:0)

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

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

确保记录余烬路线名称,而不仅仅是URL和任何无关的数据。

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

过去当我处理这些事情时,很容易进入半无限循环,所以我一定要确保你给他们选择恢复或者其他东西而不是让它自动化。