Creating a model based on an existing one in a Route's `model`

I’m trying to create a route for creating a new model based on an existing model with a cloneVolumeFrom method which is called by overriding the Route’s model. Unfortunately, since the basis model isn’t loaded immediately, it’s data isn’t accessible in the router yet. I’m using ember-model for the data layer, but I think there’s a generic solution to this sort of need that I haven’t figured out yet. Is there a pattern for doing this, or am I approaching this the wrong way?

https://gist.github.com/superlou/6471462/ed9a4d222c583a949fb37c4c1fca0608629770e7

Thanks, Louis

Sorry to double post, but I think I may have solved it (or at least made myself some more subtle errors). By using the fetch method, I can then use the returned promise and return after acting on the promise’s data.

https://gist.github.com/superlou/6471462/51afc49f4fd85d6da05ec2723af1e4d8a0ec0bc0

Well, I’ve gotten myself into a mess trying to handle the difference between a URL load and a transition via linkTo. I think I have to handle it something like the following in the route:

Library.BooksCloneVolumeRoute = Ember.Route.extend
  model: (params)->
    Library.Book.cloneVolumeFrom(params.book_id)

  setupController: (controller, model)->
    controller.set 'model', Library.Book.cloneVolumeFrom(model.get('id'))

Unfortunately, the promise doesn’t seem to resolve properly since in the Ember Inspector, the model is an [object Object] with an attribute fulfillmentValue: Library.Book:ember739. Is there a recommended way to handle this?

This seems to work:

Library.BooksCloneVolumeRoute = Ember.Route.extend
  setupController: (controller, model)->
    Library.Book.cloneVolumeFrom(model.get('id')).then (model)->
      controller.set('model', model)

This feels a little weird, because while the model is properly set when entering via URL as well as transitionTo, the initial model hook is loading the original basis model rather than the new derived model. I don’t think this is a deal-breaker, but I feel like the beforeModel hook may be a better way to do this, I just can’t figure out how.