我有一个动作:
{{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
如何从控制器操作重定向回路线?
答案 0 :(得分:17)
事实上,这不是Ember惯用语。据我所知,以及我从Tom Dale本人那里学到的东西,这里有一些关于该代码的评论:
你一定要把动作放在路由器里面,并相应地转换。
希望这会有所帮助。
<强>更新强>
第一个示例(靠近您的样本)
在适当的路线:
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
:创建新记录并转换到edit
路由,例如editItem
:transitionTo edit
route 进入edit
路由,跟随事件处理程序:
saveItem
:将提交store和transitionTo show
路由,例如答案 1 :(得分:17)
使用transitionToRoute('route')在Ember控制器操作中重定向:
App.AddBoardController = Ember.Controller.extend({
create: function(){
...
//TODO: Redirect to route
this.transitionToRoute('route_name');
}
...
答案 2 :(得分:3)
编辑:继续阅读,Mike的回答讨论了这种方法的一些问题。
您可以直接在路由器上调用transitionTo。如果您使用默认值,则看起来像App.router.transitionTo('route', context)
。