Skip to content

Instantly share code, notes, and snippets.

@rummykhan
Created December 16, 2018 07:55
Show Gist options
  • Save rummykhan/709370c0fc4b67de521585969c02efbf to your computer and use it in GitHub Desktop.
Save rummykhan/709370c0fc4b67de521585969c02efbf to your computer and use it in GitHub Desktop.
Simplistic Javascript Observer - Novice
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