【问题标题】:Why do I need to define an index route in Ember.js?为什么我需要在 Ember.js 中定义索引路由?
【发布时间】:2017-05-12 15:24:37
【问题描述】:

以前,我的路线是定义好的:

this.route('username', {
  path: '/:username'
}, function() {
  this.route("room", {
    path: "/:room",
});

我改成:

this.route('username', {
    path: '/:username'
  }, function() {
    this.route('index')
});
this.route("room", {
  path: "/:room"
});

这很好用。但是除非我在router.js 中明确定义索引,否则我的username/index 路由将不会加载。

以下将不起作用

this.route('username', {
  path: '/:username'
});
this.route("room", {
  path: "/:room",
});

这是正常行为吗?

【问题讨论】:

  • 也许你可以举一个这样的例子:ember-twiddle.com/… 我通常不使用索引路由,而是更具体地命名它们。

标签: javascript ember.js routes


【解决方案1】:

route 嵌套了routes 时,假定父路由有index。这在指南中指的是:https://guides.emberjs.com/v2.13.0/routing/defining-your-routes/#toc_index-routes

特别是,关键短语是:

在每一层嵌套(包括顶层),Ember 自动为 / 路径命名为 index 提供路由。要查看何时出现新的嵌套级别,请检查路由器,每当您看到一个函数时,这就是一个新的级别。

因此,在您的示例中,因为room 嵌套在username 中,所以username 会自动获得index 路由。当您从嵌套中删除 room 时,username 的默认 index 路由消失了。

仅供参考,您甚至不必指定索引路由,只需提供一个空回调即可。例如:

this.route('username', {
    path: '/:username'
  }, function() {});

这将通过自动创建username/index 路由以相同的方式工作。

在我早期的 Ember 应用程序之一 (1.x) 中,我希望索引路由始终存在(为了保持一致性),因此我定义了一个变量:

var NO_CHILDREN= function() {};

然后我可以像这样写我的路线:

this.route('username', {
    path: '/:username'
  }, NO_CHILDREN);

希望有帮助

【讨论】:

  • 这很有趣,不是我所期望的。谢谢,这个答案拓宽了我的理解(希望将来其他人也能如此)!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-10
  • 2016-10-17
  • 1970-01-01
  • 2016-07-18
  • 2013-03-18
  • 1970-01-01
相关资源
最近更新 更多