Is there a clean way to set up nested routes without rendering parent routes and still being able to set values on the controller?


#1

I know that I can use nested routes which don’t render the parent routes, if I don’t use templates/myRoute.hbs , but templates/myRoute/index.hbs. However, this leads to another issue:

If in routes/index.hbs I use the setupController method, to set a value on the controller, I end up with the controller for controllers/myRoute.js instead of controllers/myRoute/index.js (which I would actually need). So, I could work around that by manually retrieving the right controller, or using a different way to set up the controller, but both seem rather cumbersome.

I tried to setup all the routes, controllers and templates to use the */myRoute/index.js|hbs pattern, however this just leads to the params in the route:model(params) function being undefined…

Is there a clean way to render a template without rendering the parent nested templates and still being able to access that controller from setupController() in the route?


#2

I know that I can use nested routes which don’t render the parent routes,

This is incorrect, if a nested route is rendered, then the parent route must also be rendered too.

Those routes are different things - the index route is a completely different route to the parent route.

You should implement the setupController hook on the route that you want to use it on, not on a different route.


#3

Agreed. I should have been writing that the parent templates are not rendered instead of the route. I wish I could be just using the correct route, however I came across the implications mentioned above. If I don’t use the index routes+templates, parent templates are required to be rendered (unless I am missing something). If I use index routes and templates, ember does not provide the Params in the route, hence I lose the information about the id of the current resource (and fail to get the model). If I mix both non-index route and index controller/template, I have access to all the data and behavior I need, but setup gets quite messy. It feels like I am trying to fight the ember conventions, but can’t find a way to avoid that.

Edit: I have noticed that in most cases I am able to get the corresponding model in the index route by calling this.modelFor('myModel'). Still this feels rather cumbersome…