EmberJS:如何从控制器的动作转换到路由器 [英] EmberJS: How to transition to a router from a controller's action
本文介绍了EmberJS:如何从控制器的动作转换到路由器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个动作:
{{action create target="controller"}}
我已经针对绑定的控制器(而不是路由器)这样:
which I have targeted to the bound controller (rather than the router) like this:
App.AddBoardController = Ember.Controller.extend
create: ->
App.store.createRecord App.Board, {title: @get "boardName"}
App.store.commit()
//TODO: Redirect to route
如何从控制器操作重定向到路由?
How do I redirect back to a route from the controller action?
推荐答案
其实这不是Ember惯用的。从我所知道的以及我从汤姆·戴尔自己身上学到的东西,这里有一些关于该代码的评论:
In fact, this is not Ember idiomatic. From what I know, and what I have learnt from Tom Dale himself, here are some remarks about that code:
- 首先,你不应该从别的地方转移到路由器内部:通过这样做,你会暴露自己的严重问题,因为你不知道在哪个状态是路由器,所以要保持东西运行,你将很快降级你的设计,并通过方式您的代码的整体质量,最后是您的应用程序的稳定性,
- 其次,您显示的操作内容应位于路由器内部,以避免不必要的上下文执行。路由器确实是为整个应用程序强制执行连贯行为的一种方式,只在某些状态下处理该动作。当您将操作实施到控制器中时,可以随时调用这些操作,任何包含错误的操作。
- 最后,Ember的控制器并不旨在包含行为,因为它们是值加载包装,主要计算属性。如果你想要将原始因素分解,也许模型可以是一个好的地方,或第三方的上下文,但肯定不是控制器。
你应该把路由器里面的动作放在路由器里面,然后转换到。
You should definitely put the action inside the router, and transitionTo accordingly.
希望这将有所帮助。
更新
第一个例子(接近你的样本)
在专用路由中:
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
:显示现有项目 -
编辑
:建议输入项目的字段
show
: displays an existing item,edit
: proposes to input item's fields
进入封闭路线,跟随事件处理程序:
Into the enclosing route, following event handlers:
-
createItem
:创建一个新记录并转换到编辑
路由,例如 -
editItem
:transitionTo编辑
路线
createItem
: create a new record and transitionToedit
route, e.geditItem
: transitionToedit
route
进入编辑
路由,以下事件处理程序:
Into the edit
route, following event handlers:
-
saveItem
:将提交存储和转换到显示
路由,例如
saveItem
: which will commit store and transitionToshow
route, e.g
这篇关于EmberJS:如何从控制器的动作转换到路由器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文