Merge pull request #613 from glowing-bear/add-settings-cache
settings: add a cache
This commit is contained in:
commit
407050e577
1 changed files with 12 additions and 1 deletions
|
@ -6,6 +6,13 @@ var weechat = angular.module('weechat');
|
||||||
weechat.factory('settings', ['$store', '$rootScope', function($store, $rootScope) {
|
weechat.factory('settings', ['$store', '$rootScope', function($store, $rootScope) {
|
||||||
var that = this;
|
var that = this;
|
||||||
this.callbacks = {};
|
this.callbacks = {};
|
||||||
|
// This cache is important for two reasons. One, angular hits it up really often
|
||||||
|
// (because it needs to check for changes and it's not very clever about it).
|
||||||
|
// Two, it prevents weird type conversion issues that otherwise arise in
|
||||||
|
// $store.parseValue (e.g. converting "123." to the number 123 even though it
|
||||||
|
// actually was the beginning of an IP address that the user was in the
|
||||||
|
// process of entering)
|
||||||
|
this.cache = {};
|
||||||
|
|
||||||
// Define a property for a setting, retrieving it on read
|
// Define a property for a setting, retrieving it on read
|
||||||
// and writing it to localStorage on write
|
// and writing it to localStorage on write
|
||||||
|
@ -14,9 +21,13 @@ weechat.factory('settings', ['$store', '$rootScope', function($store, $rootScope
|
||||||
enumerable: true,
|
enumerable: true,
|
||||||
key: key,
|
key: key,
|
||||||
get: function() {
|
get: function() {
|
||||||
return $store.get(key);
|
if (!(key in this.cache)) {
|
||||||
|
this.cache[key] = $store.get(key);
|
||||||
|
}
|
||||||
|
return this.cache[key];
|
||||||
},
|
},
|
||||||
set: function(newVal) {
|
set: function(newVal) {
|
||||||
|
this.cache[key] = newVal;
|
||||||
$store.set(key, newVal);
|
$store.set(key, newVal);
|
||||||
// Call any callbacks
|
// Call any callbacks
|
||||||
var callbacks = that.callbacks[key];
|
var callbacks = that.callbacks[key];
|
||||||
|
|
Loading…
Reference in a new issue