【问题标题】:emberjs using multiple paths / urls for one routeemberjs 为一条路线使用多个路径/url
【发布时间】:2014-07-24 00:13:51
【问题描述】:

在 Ember 中我可以使用这个:

App.Router.map(function() {
    this.route('accomodations');
});

所以如果一个人去 /accomodations 它会加载那个视图。

我也可以加:

App.Router.map(function() {
    this.route('accomodations', { path: '/travel' });
});

所以如果一个人去/travel,它会去同一个视图。

我希望 /accomodations 和 /travel 能够进入同一个视图?这可能吗?

我知道:

App.Router.map(function() {
    this.route('accomodations');
    this.route('accomodations', { path: '/travel' });
});

会按我的要求做,但如果他们去住宿,它应该在网址中显示,它总是显示旅行。我什至不确定最后一段代码是否是最佳实践。

【问题讨论】:

标签: javascript url ember.js routes views


【解决方案1】:

您可以简单地互换两条路由路径定义行:

App.Router.map(function() {

     this.route('accomodations', { path: '/travel' });
     this.route('accomodations');
});

最后一个定义优先于{{link-to ...'accomodations'}}Route#transitionTo('accomodations') 应用内转换中的 URL 显示,尽管通过 '/travel' 进入应用程序将使 URL 保持原样。 (EmberJS 1.11.3、2.12.2)

【讨论】:

  • 此行为在 Ember 2.10 中已更改,您不能再这样使用它了。
  • 我也不确定如果您正在执行多级路由,此解决方案是否有效。 (即hat -> products/hats)。
  • 我刚刚用 Ember 3.26.1 试了一下,效果很好。两种路由都有效,并且都不会更新 URL(一个不会重定向到另一个)。
【解决方案2】:

使用重定向

router.js

App.Router.map(function() {
    this.route('accomodations');
    this.route('travel');
});

routes/travel.js

App.TravelRoute = Ember.Route.extend({
    redirect: function() {
        this.transitionTo('accomodations');
    },
});

您不必将它们放在单独的文件中(这正是我放置它们的地方)。

它的作用是向路由器注册两条路由。选择其中一个作为“主要”路由,另一个作为“别名”路由。在这种情况下,accomodation 是主路由,travel 是它的别名。当用户访问/travel时,他们会被重定向到/accomodation

这将是 Ember 完成此操作的默认/标准方式,如果这对您来说听起来不错,那就去做吧。

另一种可能的解决方案

如果您出于某种原因不希望发生重定向,并希望用户看到的 URL 保持不变,但仍显示相同的内容并以相同的方式运行,这也是可能的。

在这种情况下,您将为每个 Ember 单元(路由、控制器、视图、模板)创建两个。聪明的方法是创建一个基类路由,并让App.TravelRouteApp.AccomodationRoute 简单地扩展它;创建一个基类控制器,并让App.TravelControllerApp.AccomodationController 简单地扩展它;视图也一样,如果有的话。

OTOH 的模板有点棘手,因为没有办法扩展它们(据我所知)。所以你需要做的是创建一个部分或一个组件(决定哪个更适合你),然后在 templates/accomodation.hbstemplates/travel.hbs 中重用该部分/组件。

【讨论】:

  • 对于可以使用符号链接的模板
  • 这似乎不起作用。致电this.transitionTo('route') 后,没有任何反应。 'route' 的钩子没有被执行。
  • @kleinfreund 您可能需要使用 2014 年的 EmberJs 版本才能正常工作
猜你喜欢
  • 2017-11-09
  • 2013-12-29
  • 1970-01-01
  • 2019-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多