HTML and CSS Reference
In-Depth Information
As discussed above, this function accepts four parameters. When we invoke this from our
task application, the first parameter will always be “task”, while the second parameter will
be an object representing a task. The third and forth parameters are the success and error
callbacks respectively.
Let's step through this implementation line by line.
The first block of code simply checks that
init
and
initObjectStore
have been invoked. If
these have not been invoked, the error callback is invoked:
if (!initialized) {
errorCallback('storage_api_not_initialized', 'The storage engine has not been initialized');
} else if (!initializedObjectStores[type]) {
errorCallback('store_not_initialized', 'The object store '+type+' has not been initialized');
}
The next section of the method checks if the object to be saved has an
id
or not: if it does
not have an
id
, a unique
id
is assigned.
if (!obj.id) {
obj.id = $.now();
}
We next query
localStorage
for the relevant object store (e.g. “task”). Since
initOb-
jectStore
has been invoked we can guarantee that there will be an object for the specified
type
:
var savedTypeString = localStorage.getItem(type);
Next, we de-serialize the “stringified” version of the object store back into an object:
var storageItem = JSON.parse(savedTypeString);
We then add the object to be saved to the object store, using the
id
property of the object as
the property name. This will overwrite a value if it is already there, which means the same
code handles creates and updates:
storageItem[obj.id] = obj;
Also notice that we are not using the dot notation. Since the id starts with a number, it is
not a valid JavaScript variable name, and therefore the dot notation would not work.
We then serialize
storedItem
back into a string and add it back into
localStorage
:
localStorage.setItem(type, JSON.stringify(storageItem));
This will automatically update the item stored against this key.