javascriptember.jsember-old-router

EmberJS: How to transition to a router from a controller's action


I have an action:

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


Solution

  • 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:

    You should definitely put the action inside the router, and transitionTo accordingly.

    Hope this will help.

    UPDATE

    First example (close to your sample)

    In the appropriated route:

    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');
    }
    

    Refactored example

    I would recommend having the following routes:

    Into the enclosing route, following event handlers:

    Into the edit route, following event handlers: