【问题标题】:TransitionTo and the new Ember RouterTransitionTo 和新的 Ember 路由器
【发布时间】:2013-01-07 20:30:50
【问题描述】:

新的 ember 路由器一直让我陷入困境。有谁知道当您 (1) 不在路由器中使用重定向 (2) 不使用 linkTo 帮助器时如何手动触发 url 更改?

好像是这样的:

App.container.lookup('router:main').router

在今天的版本中不再有效。

【问题讨论】:

  • 从哪里调用路由器?
  • @sly7_7 好吧,我基本上是想让 ember 与另一个 javascript 库很好地配合,它将各种东西绘制到 dom 上(非常烦人)。我想做的是手动触发路由器中的状态更改,比如说,这些插入的 dom 元素上的点击事件。
  • 所以,你在一个视图中,它通常有一个控制器。至于今天,可以调用 view.get('controller').transitionTo('state')
  • 看起来最好的方法是设置事件并让控制器发送事件。但是我和你有同样的问题。我正在使用第 3 方库,但我不确定如何引用当前控制器/视图来触发事件或触发转换。

标签: ember.js ember-router


【解决方案1】:

这在新的 ember 路由器中似乎很难做到,因为 ember 正在努力阻止您以这种风格编写代码。而不是通过App 访问路由器的实例(或其他任何东西),您的 ember 应用程序代码应该使用框架在运行时注入的属性。正如上面提到的@sly7_7,您的视图将可以访问控制器,并且控制器可以触发如下转换:

view.get('controller').transitionTo('state')

根据您的第三方库的工作方式,您可以通过触发 dom 中的事件(由视图处理)或在从 didInsertElement 中呈现视图时注册回调来实现此目的

要记住的主要事情是App.anything-in-lowercase 通常是不好的做法。尽可能尝试让框架负责实例化和连接您的应用程序类。

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

【讨论】:

  • 随后@sly7_7 的评论,我想出了如何将我的模板包装在一个视图中,然后该视图将响应浏览器事件。如果这被认为是最佳实践,我想这可能是最好的。谢谢!
【解决方案2】:

你可以试试这个:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-07
    • 2019-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-05
    • 2012-12-19
    相关资源
    最近更新 更多