0

来自 ember.js 文档,对于 RC4:

LINKTO 现在生成 ROUTETO 事件

以前,{{linkTo}} 帮助器在没有任何钩子影响该行为的情况下导致路由器转换。感谢 Alex Matchneer 的工作,{{linkTo}} 助手现在生成了一个 routeTo 事件,可以像控制器或路由的事件对象中的任何其他事件一样处理该事件。转换到指定路由的默认行为保持不变。

我不明白如何使用它。我试图做这样的事情:

App.ApplicationController = Ember.Controller.extend
  routeTo: -> alert "hello"

但是当我点击一个链接时它永远不会被解雇。

我的目标是在我离开路线时回滚交易

4

2 回答 2

1

这应该在博客文章中,但您需要在 ENV 对象上启用一个标志。这会起作用:

Ember.ENV.ENABLE_ROUTE_TO = true

也就是说,routeTo随着路由器 API 的下一次迭代完全实现,它可能是短暂的。最有可能的是,所有转换都会触发一个可以被拦截以停止转换的事件,并且可能会调用该事件willTransition。但这并不是 100% 固化的,所以请务必订阅https://gist.github.com/machty/5647589以获取最新信息。

更新

我也完全错过了您问题的另一部分(或者可能稍后更新),但 routeTo 不是您在控制器上定义的属性,而是在路由上触发的事件。所以不要把它放在控制器上,你会做

App.SomeRoute = Ember.Route.extend
  events:
    routeTo: -> alert "hello"

但是您不希望在 ApplicationRoute 上这样做,因为这是默认安装的 routeTo 处理程序为您执行转换的地方。routeTo 的全部目的是在更叶的路线上捕获事件并可能阻止它发生。

重要的警告

只是想重申一下,这是 API 的一个非常短暂的特性(无论如何它有点实验性,因此它被包装在一个标志中)。在路由器 API 的下一次迭代中, routeTo 可能会被一个willTransition事件替换,我将在此更新此答案。

于 2013-06-05T20:16:14.307 回答
0

如果您想在离开路由时回滚事务,可以使用 deactivate 钩子,详情如下:http: //emberjs.com/api/classes/Ember.Route.html#method_deactivate

这是在路由退出之前调用的。

像这样的东西:

App.MyFavouriteRoute = Ember.Route.extend({
  deactivate: function() {
    //roll back your transaction here
    console.log('deactivating my favourite route');
  }
});

请注意,如果您只是更改模型,则不会调用此方法...即:如果您从 /myFavourite/1 转换为 /myFavourite/2 则不会调用 deactivate ....但是如果您转换为 /myFavourites 然后它将被称为

于 2013-06-05T09:34:06.110 回答