Skip to content

Instantly share code, notes, and snippets.

@js1972
Created June 20, 2017 04:41
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save js1972/6122140d588aa4a96d73e76fe4f9a511 to your computer and use it in GitHub Desktop.
Save js1972/6122140d588aa4a96d73e76fe4f9a511 to your computer and use it in GitHub Desktop.
SAPUI5 Local Storage Model
sap.ui.define([
"sap/ui/model/json/JSONModel",
"jquery.sap.storage"
], function(JSONModel, jQuery) {
"use strict";
return JSONModel.extend("sap.ui.demo.cart.model.CartModel", {
_STORAGE_KEY : "LOCALSTORAGE_MODEL",
_storage : jQuery.sap.storage(jQuery.sap.storage.Type.local),
/**
* Fetches the favorites from local storage and sets up the JSON model
* By default the string "LOCALSTORAGE_MODEL" is used but it is recommended to set a custom key
* to avoid name clashes with other apps or other instances of this model class
* @param {string} sStorageKey storage key that will be used as an id for the local storage data
* @param {Object} oSettings settings objec that is passed to the JSON model constructor
* @return {sap.ui.demo.cart.model.LocalStorageModel} the local storage model instance
*/
constructor : function(sStorageKey, oSettings) {
// call super constructor with everything from the second argument
JSONModel.apply(this, [].slice.call(arguments, 1));
this.setSizeLimit(1000000);
// override default storage key
if (sStorageKey) {
this._STORAGE_KEY = sStorageKey;
}
// load data from local storage
this._loadData();
return this;
},
/**
* Loads the current state of the model from local storage
*/
_loadData : function() {
var sJSON = this._storage.get(this._STORAGE_KEY);
if (sJSON) {
this.setData(JSON.parse(sJSON));
}
this._bDataLoaded = true;
},
/**
* Saves the current state of the model to local storage
*/
_storeData : function() {
var oData = this.getData();
// update local storage with current data
var sJSON = JSON.stringify(oData);
this._storage.put(this._STORAGE_KEY, sJSON);
},
/**
* Sets a property for the JSON model
* @override
*/
setProperty : function () {
JSONModel.prototype.setProperty.apply(this, arguments);
this._storeData();
},
/**
* Sets the data for the JSON model
* @override
*/
setData : function () {
JSONModel.prototype.setData.apply(this, arguments);
// called from constructor: only store data after first load
if (this._bDataLoaded) {
this._storeData();
}
},
/**
* Refreshes the model with the current data
* @override
*/
refresh : function () {
JSONModel.prototype.refresh.apply(this, arguments);
this._storeData();
}
});
});
@js1972
Copy link
Author

js1972 commented Jun 20, 2017

This is a SAPUI5 model for handling browser local storage. It is based on extending the standard JSON model. See http://openui5.tumblr.com/post/158473564552 for more details...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment