【问题标题】:Remove dynamic segment information from route emberjs从路由 emberjs 中删除动态段信息
【发布时间】:2017-05-15 20:22:21
【问题描述】:

我有一个 ember 引擎,并在其中定义了一条路线。它按预期工作。它被称为my-route。它是这样定义的:

this.route('my-route', {path: '/my-route/:myparams'});routes.js 文件中。

如您所见,它有一个动态段,并根据myparams 显示不同的值。

我想在这个route 中添加一个嵌套的route。假设.../my-route/1 显示了一个项目列表。当用户点击页面上列出的任何项目时,路由应该是:my-route/display,而不是my-route/1/display。我不希望在此处使用 1,因为它可能会产生误导。

另外,link-to 也不会打开任何东西,点击什么也不做。 这就是我更改routes.jsfile 的方式:

this.route('my-route', {path: '/my-route/:myparams'}, function() { this.route('display'); });

display.hbs 文件中我添加了虚拟数据,而display.js 也是空的,只是从Ember.route 扩展而来。 my-route.hbs 链接如下:

{{#link-to 'my-route.display'}} Open me {{/link-to}}'

我是 EmberJS 的新手,如果有人能告诉我如何操作,我将不胜感激:

  1. 删除动态段信息
  2. link-to 工作

谢谢!

【问题讨论】:

  • 我认为您有 X-Y 问题。为什么/my-route/1 会显示一个list 项?它应该显示项目1 的内容。请详细说明您要显示的内容,以及为什么要按您所说的那样嵌套路由。您的嵌套可能有问题。
  • 我想用my-route/param 显示列表,然后单击其中一个项目,打开实际项目。或许我应该重新审视我的设计?
  • my-route/param 上的项目列表与param 相关?然后,如果您显示实际项目它不再与参数相关?并且你的 UI 是嵌套的。可能只是不要嵌套路线。如果您的 UI 没有嵌套,请不要嵌套您的路线。
  • 是的,和param有关。是的,当显示实际项目时,它将不再与参数相关。问题是我有一条路线称为list,另一条路线称为display。那么就不需要my-route。我将如何管理它?
  • 是的。然后不要使用my-route。为什么要my-route

标签: javascript ember.js routing routes


【解决方案1】:

1) 我想不出从 url 中删除动态段的简单方法——如果必须,你可能只是不使用动态段并通过其他方式将信息发送到转换路由——你可以设置直接控制器 “newRoute.controller.set('someProperty', my_param);” 或者使用需要的api(http://emberjs.com/guides/controllers/dependencies-between-controllers/)

但请注意,这两种方法都将使用控制器。如果您需要根据查询参数在路由中加载数据,那么想到的是使用服务

但是这些方法不是很复杂,我会说只有在动态细分绝对不行的情况下才使用它。

2) 这个更简单——你需要在使用链接时传递动态部分和路由名称——如 ember 指南中给出的 https://guides.emberjs.com/v2.0.0/templates/links/

【讨论】:

  • 想一想,你也可以使用 url 中的信息,然后更改 url。但同样,这可能会在一段时间内显示带有动态段的 url。还有很多额外的工作
  • 谢谢 Chhirag,我会回复你的问题 1。但是对于第二个问题,URL 确实发生了变化:...my-route/1/display,但它不会显示,它会重新加载 my-route .我可能做错了什么,你能告诉我吗?
  • 仔细看,你可能应该将你的动态段部分移动到显示路线,并通过link-to helper传入动态段(查看上面的ember指南链接,示例应该类似) 类似 this.route('my-route', function() { this.route('display', {path: '/my-route/:myparams'}); }); {{#link-to 'my-route.display' 显示参数}}
  • 那么我这样做的方式,实际上甚至不会呈现链接吗?
  • 正确 - 因为它需要一个动态段,而您根本不会通过它
【解决方案2】:

根据与@Lux 和@Chhirag Kataria 的讨论,我最终制作了两条不同的路线。我使用my-route 作为虚拟路由,并在其中嵌套了displaylist 路由。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多