我有一个动作:
{{action create target="controller"}}
我有针对性地绑定控制器(而不是路由器)是这样的:
App.AddBoardController = Ember.Controller.extend
create: ->
App.store.createRecord App.Board, {title: @get "boardName"}
App.store.commit()
//TODO: Redirect to route
如何重定向到从控制器的行动路线?
其实,这是不烬习惯。 据我所知,和我从汤姆·戴尔本人了解到,这里有关于代码的一些言论:
- 首先,你不应该transitionTo从其他地方比路由器内部:通过这样做,你暴露自己严重的问题,因为你不知道在哪个状态是路由器,所以保持运行的东西,你很快就会有降低您的设计上,用你的代码的整体素质,而且您的应用终于稳定性的方法,
- 其次,你出动作的内容应该位于路由器内,以避免不需要的情况下执行。 路由器确实是强制执行的整个应用程序一致的行为方式,只在某些国家正在处理的动作。 当你把行动落实到控制器,这些行动可以随时调用,包括任何错误的...
- 最后,Ember的控制器并不旨在遏制行为,因为他们相当一部分是增值包装,控股主要计算性能。 如果你仍然想因式分解元,也许该模型可以是一个很好的地方,或第三方的情况下,但肯定不是控制器。
你一定要据此提出诉讼的路由器内部,transitionTo。
希望这会有所帮助。
UPDATE
第一个例子(接近你的样品)
在拨款路线:
saveAndReturnSomewhere: function (router, event) {
var store = router.get('store'),
boardName = event.context; // you pass the (data|data container) here. In the view: {{action saveAndReturnSomewhere context="..."}}
store.createRecord(App.Board, {
title: boardName
});
store.commit();
router.transitionTo('somewhere');
}
例如重构
我会建议有以下途径:
-
show
:显示现有的项目, -
edit
:拟投入项目的领域
进入封闭路线,以下事件处理程序:
-
createItem
:创建一个新的记录,并transitionTo edit
路线,如 -
editItem
:transitionTo edit
路线
进入edit
路线,以下事件处理程序:
-
saveItem
:这将提交存储和transitionTo show
路线,如
使用transitionToRoute(“路径”)到灰烬控制器动作里面重定向:
App.AddBoardController = Ember.Controller.extend({
create: function(){
...
//TODO: Redirect to route
this.transitionToRoute('route_name');
}
...
编辑:请继续阅读,小李的回答讨论了一些这种方法的问题。
你可以只调用transitionTo直接在路由器上。 如果您正在使用默认值,这看起来像App.router.transitionTo('route', context)
。