10

如何访问新 Ember 路由器的实例?API 文档似乎是指旧路由器或不正确:http ://emberjs.com/api/classes/Ember.Router.html

4

3 回答 3

35

RouterV2 不容易通过全局常量访问,因此更难以“错误”的方式做事。要记住的主要事情是,您不应该通过全局变量访问路由器(或其他任何东西)。这样做通常是一种不好的做法,导致代码很难测试。不幸的是,使用旧路由器很容易做类似的事情App.router.transitionTo('whatever')- 你可以在任何地方找到这样的例子,但这不是一个好主意。

ember 不使用全局引用,而是在需要的地方注入对路由器的本地引用。

  • 从模型:无法访问。模型不应该与路由器通话
  • 从控制器:router = this.get('target')
  • 从一个视图来看:视图不应该访问路由器,但它发送给控制器的事件会冒泡。例如:this.get('controller').send('search', term)
  • 从模板:使用{{action}}or{{#linkTo}}助手发送事件(通过控制器)或转换到另一个 url。

有关更多详细信息,请参阅此提交的注释: https ://github.com/emberjs/ember.js/commit/5becdc4467573f80a5c5dbb51d97c6b9239714a8

** 更新 **

我为 1 月份的 EmberNYC 聚会就新路由器进行了一次闪电谈话,并详细介绍了新路由器 - 幻灯片在这里:我如何学会停止担心并爱上路由器

于 2013-01-05T06:11:42.260 回答
1

我相信这在所有地方都有效:

App.Router.router.transitionTo('home')

我在视图中使用它。我知道这里有一点代码味道。但是,它有效。

于 2013-04-29T19:17:51.287 回答
1

你可以试试这个:

App.__container__.lookup('router:main').transitionTo('name_of_your_route');
于 2013-08-22T16:40:07.730 回答