MVC using Proxy 2

by Richard Hunter

HTML

<div id="foo"></div>

<div id="bar"></div>

<div id="meh"></div>

<input id="input"/>
<input id="input2"/>

JavaScript

const target = {
  message1: "hello",
  message2: "everyone",
};
const watchers = {};

function registerWatcher(prop, watcher) {
  if (!watchers[prop]) {
    watchers[prop] = [];
  }
  watchers[prop].push(watcher)
}

const handler1 = {

  set(obj, prop, value) {
    obj[prop] = value;
    watchers[prop].forEach(watcher => watcher(value));
    return true;
  },
};

const proxy1 = new Proxy(target, handler1);

input.addEventListener('change', (event) => {
  proxy1.message1 = event.target.value;
});

input2.addEventListener('change', (event) => {
  proxy1.message2 = event.target.value;
});

registerWatcher('message1', val => {
  console.log('updating message 1 in foo');
  foo.textContent = val
});

registerWatcher('message1', val => {
  console.log('updating message 1 in bar');
  bar.textContent = val
});

registerWatcher('message2', val => {
  console.log('updating message 2 in bar');
  meh.textContent = val
});