0
votes

I'm using Ember with Ember Data and working with a REST API that returns only a small set of properties at the list endpoint and the full payload at the details endpoint. For example:

URL: /api/users

{
    "users":[
        {"id":1,"name":"Bob"},
        {"id":2,"name":"Sam"}
    ]
}

URL: /api/users/1

{
    "user":{
        "id":1,
        "name": "Bob",
        "description": "Lorem ipsum dolor"
    }
}

Notice how /api/users/1 returns more properties than the list. With Ember Data, how do you get it to fetch the full payload when necessary if I have my Routes set up as follows?

App.UsersRoute = Ember.Route.extend({
    model: function () {
        return this.store.find('user');
    }
});

App.UserRoute = Ember.Route.extend({
    model: function (params) {
        return this.store.find('user', params.user_id);
    }
});

The problem is this line:

this.store.find('user', params.user_id)

It doensn't request the full payload from the server if the list has already be loaded, so calling the store's find method returns the user with limited properties from its cache.

1

1 Answers

1
votes

You could do something like:

  var user = this.store.getById('user', params.user_id);
  if (user) {
    return user.reload();
  } else {
    return this.store.find('user', params.user_id);
  }

Check store methods (getById, hasRecordForId, recordIsLoaded) and model reload.