对多个嵌套的ember路由使用相同的URL

时间:2017-11-21 22:05:27

标签: javascript ember.js

我有一个使用Ember的案例,我想让顶级URL可用(即localhost:4200 / demo),并且下面的所有路径也显示相同的URL(localhost:4200 / demo)。所以路由文件,如果可能的话看起来像:

this.route('demo', function() {
  this.route('one', { path: '/' });
  this.route('submit', { path: '/' });
});

我了解可以为整个应用设置ENV.locationtype,但有没有办法为父网址下的特定网址有条件设置?

2 个答案:

答案 0 :(得分:1)

一般来说,当你最终遇到这样的重大障碍时,是因为Ember暗中试图告诉你,你所做的事情并不是一个好主意。

您是否有特殊原因要求您的子路径以任何方式影响URL?如果您的主要目的是混淆事物,你能否接受URL中的随机值?

Ember使用网址来确定应用中的状态。如果您根本不想使用路由,那么此时您正在处理必须在自己之间切换的组件的嵌套层次结构。这实际上类似于在没有路由器的情况下使用React ......

答案 1 :(得分:0)

默认情况下,Ember可以管理URL,或者可以将其设置为不管理它们,但似乎期望的目的是让它在单个环境中执行,这在逻辑上是不允许的。

如果为none宣布ENV.locationtype,则会关闭Ember的默认网址管理。这是一个全环境的"组态。

如果使用Ember路由器映射嵌套路由,并且正在使用默认URL管理,那么请注意您不能为多个兄弟路径子路径定义相同的URL路径。

进一步观察,您的上述尝试是利用路由器地图中每个嵌套级别可用的single index route管理的功能。但是,路由不能有多个index路由。只识别定义的最后一个。

Router.map(function() {
  this.route('demo', function() {
    this.route('one', { path: '/' })    // <-- this is over-ridden by "submit"
    this.route('submit', { path: '/' }) // <-- this defines an "index" route for demo
  })
})