3
votes

I know this question might seem a little duplicate but the other version of this question is old and some of the content (such as Views) aren't even a part of ember anymore.

I'm about 4 weeks into my internship as a front-end developer working with EmberJS. I still don't understand when it's better to use the route over the controller or vice-versa. It seems to me that every action in the route can also be used in the controller.

The one recent thing I heard was that ember routes should be stateless where as controllers should be stateful.

What is the current state of controllers and routes. When should one be used over the other?

1
The stateful vs stateless is definitely a good way to go. Also know that this part of the ember API is historically grown, and probably not the most logical thing.Lux
Oddly enough as far as actions go you can trigger actions from either the controller or the route. For instance you can trigger a route action using this.send() in the controller, or a controller action using this.send() in the route. I personally use route actions for routing and controller actions for everything outside that.JT Mechkowski

1 Answers

6
votes

Consider the following example to understand the state of a controller (or route, or anything), in simple terms and in current context -- lets say you have a page (like a form) with three tabs; each tab can be considered as a state - it would call different components based on the state (or the tab you are in). Now if you would happen to go back for some reason, and hit the form link again, you would see that the state would remain the same. (if you were on tab 2 when you hit back, on returning to the form, you would still be on tab 2).

So to maintain these states, controllers are the way to go, since they are singletons. Route would have lost that information, and started fresh. So basically your variables/objects in a controller would define the 'state'.

Route-actions can be as easily used as controller actions- see https://github.com/DockYard/ember-route-action-helper. So if your template for this route is just using model as the object directly, and you don't need to maintain the 'state', you can pretty much do without your controller.

But if your template was using variables which needed manipulation, you would need controller.

Hope this helps!