I have a UserSession model defined as such:
App.UserSession = DS.Model.extend({
authToken: attr('string'),
firstName: attr('string'),
lastName: attr('string')
});
When a user is logging in, I'm making an AJAX POST request to my back-end which return a JSON representation such as:
{
"user_session": {
"id": 1,
"auth_token": "token_here",
"first_name": "John",
"last_name": "Doe"
}
}
Now normally, if I were to do the following, Ember Data would take care of automatically serializing the JSON and adding the object:
App.UserSession.find(<session-id>);
When I'm making a manual AJAX call though, is there an easy way to load the JSON returned into an Ember Data store object without having to manually deserialize it?
Edited for clarity:
The below does not work, but I'm hoping to find some function that does what's described above, which may look similar to the call below.
App.UserSession.load(<session-json>);
If you're using the latest version (11) of ember-data there is a breaking change for loading data.
Loading Data
Previously, some features of the store, such as load(), assumed a single adapter.
If you want to load data from your backend without the application asking for it (for example, through a WebSockets stream), use this API:
store.adapterForType(App.Person).load(store, App.Person, payload);
This API will also handle sideloaded and embedded data. We plan to add a more convenient version of this API in the future.
https://github.com/emberjs/data/blob/master/BREAKING_CHANGES.md#loading-data
You're going to want to grab the instance of your store. If you're in a controller you can do:
@get('store')
You can also do:
App.__container__.lookup('store:main')
which isn't recommended as it's using the internal API (noted by the __ surrounding the container call) which isn't guaranteed to not change.
Once you have your instance of the store you can load in your UserSession:
@get('store').adapterForType(App.UserSession).load(@get('store'), App.UserSession, sessionJson['user_session']);