Cómo implementar el enlace de datos DOM en JavaScript

Por favor, trate esta pregunta como estrictamente educativa.Todavía estoy interesado en escuchar nuevas respuestas e ideas para implementar esto.

tl; dr

¿Cómo implementaría el enlace de datos bidireccional con JavaScript?

Enlace de datos al DOM

Por enlace de datos al DOM me refiero, por ejemplo, a tener un objeto JavaScripta&nbsp;con una propiedadb. Entonces tener una<input>&nbsp;Elemento DOM (por ejemplo), cuando el elemento DOM cambia,a&nbsp;cambios y viceversa (es decir, me refiero a enlace de datos bidireccional).

Aquí hay un diagrama de AngularJS sobre cómo se ve esto:

Así que básicamente tengo JavaScript similar a:

var a = {b:3};

Luego un elemento de entrada (u otra forma) como:

<input type='text' value=''>

Me gustaría que el valor de la entrada fueraa.bel valor (por ejemplo), y cuando el texto de entrada cambie, me gustaríaa.b&nbsp;cambiar tambien Cuandoa.b&nbsp;Cambios en JavaScript, la entrada cambia.

La pregunta

¿Cuáles son algunas técnicas básicas para lograr esto en JavaScript simple?

En concreto, me gustaría una buena respuesta para referirme a:

¿Cómo funcionaría la encuadernación de objetos?¿Cómo podría funcionar escuchar el cambio en la forma?¿Es posible de una manera simple tener solo el HTML modificado en el nivel de la plantilla? Me gustaría no realizar un seguimiento del enlace en el documento HTML en sí, sino solo en JavaScript (con eventos DOM y JavaScript manteniendo la referencia a los elementos DOM utilizados).¿Qué he intentado?

Soy un gran fan de Moustache, así que traté de usarlo para las plantillas. Sin embargo, tuve problemas al intentar realizar el enlace de datos en sí mismo, ya que el bigote procesa HTML como una cadena, por lo que, después de obtener su resultado, no tengo ninguna referencia a dónde se encuentran los objetos en mi modelo de vista. La única solución que podría pensar para esto fue modificar la cadena HTML (o el árbol DOM creado) con atributos. No me importa usar un motor de plantillas diferente.

Básicamente, tuve la fuerte sensación de que estaba complicando el problema en cuestión y hay una solución simple.

Nota:&nbsp;No proporcione respuestas que usen bibliotecas externas, especialmente las que son miles de líneas de código. He usado (y me gusta!) AngularJS y KnockoutJS. Realmente no quiero respuestas en la forma 'use framework x'. De manera óptima, me gustaría un futuro lector que no sepa cómo usar muchos marcos para comprender cómo implementar el enlace bidireccional de datos. No espero uncompletar&nbsp;Responde, pero uno que logra transmitir la idea.