将带有孩子的速记URL重定向到普通URL

时间:2018-10-17 17:16:42

标签: javascript ember.js routes ember-router

我正在尝试实现速记URL,这些速记URL重定向到常规URL,以使其在输入地址栏时更加有效。我正在尝试为crates.io项目实施此操作。

为弄清我的意思,我想这样重定向URL:

  • /c => /crates
  • /c/rand => /crates/rand
  • /c/rand/0.5.5 => /crates/rand/0.5.5
  • /c/... => /crates/...

这是当前配置的相关长途路由中的snippet

this.route('crates');
this.route('crate', { path: '/crates/:crate_id' }, function() {
    this.route('download');
    this.route('versions');
    this.route('version', { path: '/:version_num' });
    this.route('reverse-dependencies', { path: 'reverse_dependencies' });
    this.route('owners');
    this.route('docs');
    this.route('repo');
});

这是我尝试过的;我确实尝试通过定义以下其他路由来实现这些重定向:

this.route('c');
this.route('c', { path: '/c/:crate_id' });

有了这个./routes/c.js

import Route from '@ember/routing/route';

export default Route.extend({
    afterModel(crate, path) {
        if (crate === undefined) this.transitionTo('crates');
        else this.transitionTo('crate', crate, path);
    },
});

这仅部分起作用。 /c/c/rand路由已覆盖并且有效,而其他/c/rand/0.5.5等路由则无效。

我可以实现所有子路线的可能性,但是我认为这样做不是正确的方法。我想防止重复的代码。


我该如何正确实施?是否可以将以/c开头的内容重定向到各自的长途路由?我查看了ember文档,但没有找到解决方案。我觉得肯定有比我尝试过的更好的方法。谁能指出我正确的方向?

0 个答案:

没有答案