如何将路径映射到路线?

时间:2013-11-16 08:31:20

标签: ember.js url-routing

这是我路由器的一部分:

this.resource('phoneNumbers', function () {

    this.resource('locators', function () {
        this.route('index');
        this.route('new');
        this.route('show',   { path: '/:locator_id/show' });
        this.route('edit',   { path: '/:locator_id/edit' });
    });

    this.resource('phonelocations', function () {
        this.route('index');
    });

});

有时候我需要做以下事情:

  1. 用户点击编辑按钮
  2. 我抓住了currentPath:phoneNumbers.locators.index
  3. 显示编辑表单,其中包含cancel按钮
  4. 如果点击了取消按钮,我想使用捕获的currentPaththis.transitionToRoute(oldCurrentPath);
  5. 过渡到旧路线

    transitionToRoute期待locators.index而不是完整路径phoneNumbers.locators.index

    Assertion failed: The route phoneNumbers.locators.index was not found 
    Uncaught Error: There is no route named phoneNumbers.locators.index.index
    

    (我不知道为什么ember尝试phoneNumbers.locators.index.index

    为什么?如何“映射”路径的路径?我必须为此保留自己的PATH_TO_ROUTE_MAP吗?这就是我开始做的事情,并且它有效,但肯定Ember有更好的方法吗?

    另一种方法是捕获当前路线而不是currentPath。这可能吗?怎么样?

2 个答案:

答案 0 :(得分:0)

而不是从afterModel挂钩缓存currentPath缓存中的targetName,

App.PostsRoute = Ember.Route.extend({
  afterModel: function(posts, transition) {
    //cache transition.targetName
  } 
});

答案 1 :(得分:0)

钩子中可用的transition对象有一些关于它在transition.router.currentHandlerInfos下传播的路径的书籍。

你可以从那里获得以前的状态并将它们缓存到某个地方(也许applicationController可能是一个更好的地方),然后进行转换。

Demo Fiddle