EmberJS:如何从控制器转换到路由器's的操作
EmberJS: How to transition to a router from a controller's action
我有一个操作:
{{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
如何从控制器操作重定向回路由?
使用transitionToRoute('route')在Ember控制器内部重定向操作:
App.AddBoardController = Ember.Controller.extend({
create: function(){
...
//TODO: Redirect to route
this.transitionToRoute('route_name');
}
...
事实上,这不是Ember惯用语。根据我所知道的,以及我从Tom Dale身上学到的,以下是关于该代码的一些评论:
- 首先,你不应该从路由器内部以外的其他地方转换to:这样做,你会让自己面临严重的问题,因为你不知道路由器处于哪个状态,所以为了保持东西的运行,你很快就会降低你的设计,顺便说一句,你的代码的整体质量,最后是你的应用程序的稳定性
- 其次,您显示的操作内容应该位于路由器内部,以避免不希望的上下文执行。路由器确实是为整个应用程序强制执行一致行为的一种方式,只在特定状态下处理操作。当您将操作实现放入控制器时,可以随时调用这些操作,包括错误的
- 最后,Ember的控制器并不旨在包含行为,因为它们是增值包装器,主要包含计算属性。尽管如此,如果您想分解基元,那么模型可能是一个好地方,或者是第三方上下文,但肯定不是控制器
您肯定应该将操作放入路由器中,并相应地转换为。
希望这会有所帮助。
更新
第一个示例(接近您的样本)
在适当的路线上:
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');
}
重构示例
我建议有以下路线:
- CCD_ 1:显示已有项目
edit
:建议输入项目的字段
进入封闭路由,使用以下事件处理程序:
createItem
:创建一个新记录并转换到edit
路由,例如editItem
:转换到edit
路由
进入edit
路由,使用以下事件处理程序:
saveItem
:它将提交存储并转换到show
路由,例如
您可以直接在路由器上调用transitionTo。如果您使用的是默认值,它看起来像show
0。
相关文章:
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- AngularJS UI路由器不能像ng路由器那样工作
- Jquery菜单操作不稳定,定位不正确,存在一般错误
- 如何确定javascript已经完成了某些操作.ios上的
- 防止Alt+Shift默认操作或检测多种操作系统语言的Javascript
- 从JavaScript访问struts操作中的属性
- fluxxor向一个flux实例添加一组以上的操作
- 反应路由器弄乱了请求网址
- 制作一个高阶组件,用TypeScript实现反应中继和反应路由器的交互操作
- EmberJS:如何从控制器转换到路由器's的操作
- 在骨干路由器的一个操作中绑定多个视图
- 反应 Redux 路由器 在 未定义 在操作中
- 如何从视图将操作从一个控制器/路由器发送到另一个控制器/路由器
- 从反应路由器检索后退导航操作
- redux简单路由器-根据URL执行操作
- backbone.js路由器,具有多个操作
- React Redux和Redux -observable在异步操作完成后使用路由器导航到另一个页面
- 骨干路由器问题-当通过URL访问时不会加载特定的操作
- 如何在ember.js中将params传递给路由器操作