Advertisement
Guest User

Untitled

a guest
Apr 28th, 2017
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.94 KB | None | 0 0
  1. "use strict";
  2. class Model {
  3. constructor(mount, initial){
  4.  
  5. this.modelContainer = new ObservableMap();
  6.  
  7. this.subs = [];
  8. this.initial=initial;
  9. this.mount=mount;
  10. this.v = document.querySelector(mount).querySelectorAll('[data-bind]');
  11. Array.prototype.slice.call(this.v).forEach(el=>{
  12. if (el.type == "checkbox") {var val = 'checked';}else var val = 'value';
  13. el.addEventListener('input', ()=>{this.set(el.dataset['bind'], el[val])},false);
  14. if(el.type=='checkbox') el.addEventListener('change', ()=>{this.set(el.dataset['bind'], el[val])},false);
  15. this.subscribe((key,value)=>{
  16. if(el.dataset['bind']==key){
  17. el[val] = value;
  18. if (el.tagName == "SPAN" || el.tagName == "TEXT") { el.innerHTML = value }
  19. }
  20. });
  21. });
  22. Array.prototype.slice.call(this.v).forEach(el=>{
  23. if (el.type == "checkbox") {var val = 'checked';}else var val = 'value';
  24. this.modelContainer.listeners.forEach(s=>s(el.dataset['bind'], this.get(el.dataset['bind'])))});
  25. }
  26. subscribe(fn) {
  27. this.modelContainer.subscribe(fn);
  28.  
  29. }
  30. toObject() {
  31. return this.initial;
  32. }
  33. set(key, value) {
  34. eval("this.initial."+key+"=value");
  35. this.modelContainer.set(key,value);
  36. console.log(this.modelContainer.get(key));
  37.  
  38. }
  39. get(key) {
  40. return eval("this.initial."+key);
  41.  
  42. }
  43. }
  44. class ObservableMap extends Map {
  45. constructor() {
  46. super();
  47. this.listeners = [];
  48. }
  49. subscribe( callback) {
  50. this.listeners.push(callback)
  51. return () => this.listeners = this.listeners.filter(c => c != callback);
  52. }
  53. set(key, value) {
  54. super.set(key, value)
  55. this.listeners.forEach(listener => listener(key, value))
  56.  
  57. }
  58. get(key){
  59. return super.get(key);
  60. }
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement