EmberJS:如何从一个控制器的动作转换到路由器(EmberJS: How to transiti

2019-07-30 12:23发布

我有一个动作:

{{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

如何重定向到从控制器的行动路线?

Answer 1:

其实,这是不烬习惯。 据我所知,和我从汤姆·戴尔本人了解到,这里有关于代码的一些言论:

  • 首先,你不应该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路线,如


Answer 2:

使用transitionToRoute(“路径”)到灰烬控制器动作里面重定向:

App.AddBoardController = Ember.Controller.extend({
    create: function(){ 
        ...
        //TODO: Redirect to route
        this.transitionToRoute('route_name');
    }
...


Answer 3:

编辑:请继续阅读,小李的回答讨论了一些这种方法的问题。

你可以只调用transitionTo直接在路由器上。 如果您正在使用默认值,这看起来像App.router.transitionTo('route', context)



文章来源: EmberJS: How to transition to a router from a controller's action