2013-01-05 90 views

回答

35

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

除了使用全局引用外,ember仅在需要的地方向路由器注入局部引用。

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

更多详细信息,请参见本附注承诺: https://github.com/emberjs/ember.js/commit/5becdc4467573f80a5c5dbb51d97c6b9239714a8

** **更新

我把一个避雷聊上更详细的为1月EmberNYC新的路由器聚会 - 幻灯片的位置:How I learned to stop worrying and love the router

+0

而且从路线是为'得到(这一点,“路由器”)' – Pavel

1

我相信这部作品所有的地方:

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

我在视图中使用它。我知道这里有一些代码味道。但是,它的工作。

+0

绝对是一个代码味道访问。相反,发送一个动作并在一条路径中处理它以进行转换。 –

1

你可以试试这个:

App.__container__.lookup('router:main').transitionTo('name_of_your_route'); 
+1

这是可以做的调试,但应避免在生产代码。 –