js-data-angular icon indicating copy to clipboard operation
js-data-angular copied to clipboard

Cannot Cache the data for js-data actions

Open VenkatRamReddyK opened this issue 9 years ago • 2 comments

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;
    });

VenkatRamReddyK avatar Oct 07 '16 19:10 VenkatRamReddyK

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);
};

jmdobry avatar Oct 07 '16 20:10 jmdobry

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 ) {
         },...

VenkatRamReddyK avatar Oct 07 '16 20:10 VenkatRamReddyK