js-data-angular
js-data-angular copied to clipboard
Cannot Cache the data for js-data actions
Api Endpoint: : /test/users/:userId/settings
I need to use Caching with js-data actions.
$provide.factory('UserSettings', function (DS, $q, $log) {
function handleResponse( response ) {
var Resource = DS.definitions.userSettings;
response = Resource.deserialize( Resource, response );
return response;
};
var _userSettings = DS.defineResource({
basePath: '/test',
endpoint: '/users',
name: 'userSettings',
cacheResponse: true,
bypassCache: false,
actions: {
getSettings: {
method: 'GET',
pathname: 'settings',
response: handleResponse
},
saveSettings: {
method: 'PUT',
pathname: 'settings',
response: handleResponse
}
},
deserialize: function ( resourceConfig, data ) {
if ( data.config.method === 'PUT' || data.config.method === 'GET' ) {
return data.data;
}
else if ( data.config.method === 'DELETE' || data.config.method === 'POST' ) {
}
}
});
return _userSettings;
});
You have to do it yourself, something like this:
function handleResponse( response ) {
var Resource = DS.definitions.userSettings;
var data = Resource.deserialize( Resource, response );
// Inject the data into the store and return it
return Resource.inject(data);
};
Error:
index.js:107 userSettings Error: userSettings.inject: "attrs" must contain the property specified by "idAttribute"! null
Work around: passing in id to inject
But Wondering how do I retrieve the id property so that I can inject it in the following way
Should I use computed attribute ?.
function handleResponse( response ) {
var Resource = DS.definitions.userSettings;
response = Resource.deserialize( Resource, response );
return Resource.inject(response,id);
};
How do I get the userId for the computed attribute?
DS.defineResource({
,...
computed: {
id: function (userId) {
return userId;
}
},
Caller: @params userId
UserSettings.getSettings( userId )
.then( function ( userSettingsResponse ) {
},...