How to overide fetch collection to get data from localStorage cache?

Hi all,

In my app, i using localStore to cache data for first time call api server, but second time i cannot use data from cache to parse view. Please help me fix it.
var
kind = require('enyo/kind'),
AjaxSource = require('enyo/AjaxSource'),
Collection = require('enyo/Collection'),
Config = require('../GlobalConfig.js');

new AjaxSource({
name: 'ajax'
});

module.exports = kind({
name: 'CategoryCollection',
kind: Collection,
options: {parse: true,fetch:true},
cacheKey:'HOMEMENU',
source: 'ajax',
parse: function(data)
{
console.log('MENU HOME',data);
/** doc tu local cache */
if(typeof data.timeExpired != 'undefined' && data.timeExpired > new Date().getTime()){
console.log('MENU DATA ',data.data);
return data.data;
}

localStorage.setItem(this.cacheKey,JSON.stringify({timeExpired:new Date().getTime()+216000000,data:data.data}));
return data.data;
},
getUrl: function() {
return Config.ws_endpoint + 'menu/main';
},
fetch:function(){
try {
var data = localStorage.getItem(this.cacheKey);
if (data != null) {
data = JSON.parse(data);
if(data.timeExpired > new Date().getTime() && data.data.length > 0) {
console.log('CACHE');
this.parse(data);
}else{
this.inherited(arguments);
}
}else {
this.inherited(arguments);
}
}catch(e){
this.inherited(arguments);
}
}
})

Comments

  • I'm not sure what is occurring based on your description. Is the data being fetched every time? How are you requesting data from your app?

    To implement caching, I think overriding AjaxSource rather than Collection would be more appropriate. The Source is the abstraction over from where a record is retrieved; Collection is an abstraction over a list of records.
Sign In or Register to comment.