Created
December 16, 2018 07:55
-
-
Save rummykhan/709370c0fc4b67de521585969c02efbf to your computer and use it in GitHub Desktop.
Simplistic Javascript Observer - Novice
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var T_HTML = 'T_HTML'; | |
var T_VAL = 'T_VAL'; | |
var T_TEXT = 'T_TEXT'; | |
var T_FUNCTION = 'T_FUNCTION'; | |
window.Observer = { | |
types: [T_HTML, T_VAL, T_TEXT, T_FUNCTION], | |
add: function (key, value, observer, type) { | |
var that = this; | |
if (that.types.indexOf(type) < 0) { | |
console.log(' ! Observer of type(' + type + ') not supported'); | |
return; | |
} | |
if (that[key] === undefined) { | |
that[key] = { | |
value: value, | |
observers: [{ | |
observer: observer, | |
type: type | |
}] | |
}; | |
return; | |
} | |
//TODO: Check for redundant entries | |
that[key].observers.push({observer: observer, type: type}); | |
}, | |
first: function (key, value, observer, type) { | |
this.remove(key); | |
this.add(key, value, observer, type); | |
}, | |
change: function (key, value) { | |
if (this[key] === undefined) { | |
return; | |
} | |
this[key].value = value; | |
this.observe(this[key]); | |
}, | |
observe: function (v) { | |
var that = this; | |
v.observers.forEach(function (observer) { | |
that.observeValue(observer, v.value); | |
}) | |
}, | |
observeValue: function (observer, value) { | |
switch (observer.type) { | |
case T_HTML: | |
$$(observer.observer).html(value || ''); | |
break; | |
case T_VAL: | |
$$(observer.observer).val(value); | |
break; | |
case T_TEXT: | |
$$(observer.observer).text(value); | |
break; | |
case T_FUNCTION: | |
observer.observer(); | |
break; | |
} | |
}, | |
remove: function (key) { | |
delete this[key]; | |
} | |
}; | |
// How to attach observer | |
Observer.first('var_name', null, '#my-first-selector', T_TEXT); | |
// Trigger Change | |
Observer.change('var_name', 'rummykhan'); | |
// Add another observer | |
Observer.add('var_name', 'rummykhan', '.my-second-selector', T_TEXT); | |
// Trigger Change | |
Observer.change('var_name', 'jumangi'); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment