Como implementar a vinculação de dados DOM em JavaScript

Por favor, trate esta questão como estritamente educacional.Eu ainda estou interessado em ouvir novas respostas e idéias para implementar este

tl; dr

Como eu implementaria a vinculação de dados bidirecional com JavaScript?

Ligação de dados ao DOM

Por ligação de dados ao DOM, quero dizer, por exemplo, ter um objeto JavaScripta&nbsp;com uma propriedadeb. Então tendo um<input>&nbsp;Elemento DOM (por exemplo), quando o elemento DOM é alteradoa&nbsp;alterações e vice-versa (isto é, quero dizer ligação de dados bidirecional).

Aqui está um diagrama do AngularJS sobre o que isso parece:

Então basicamente eu tenho JavaScript semelhante a:

var a = {b:3};

Em seguida, um elemento de entrada (ou outro formulário) como:

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

Eu gostaria que o valor da entrada fossea.b's de valor (por exemplo), e quando o texto de entrada muda, eu gostariaa.b&nbsp;para mudar também. Quandoa.b&nbsp;mudanças em JavaScript, a entrada muda.

A questão

Quais são algumas técnicas básicas para conseguir isso em JavaScript simples?

Em específico, gostaria de uma boa resposta para se referir a:

Como seria o trabalho obrigatório para objetos?Como ouvir mudanças no formulário pode funcionar?É possível, de uma forma simples, apenas ter o HTML modificado no nível do modelo? Eu gostaria de não acompanhar a ligação no documento HTML em si, mas apenas em JavaScript (com eventos DOM e JavaScript mantendo referência aos elementos DOM usados).O que eu tentei?

Eu sou um grande fã de Bigode, então eu tentei usá-lo para modelar. No entanto, tive problemas ao tentar executar a vinculação de dados em si, pois o Bigode processa HTML como uma string, portanto, depois que obtenho o resultado, não faço referência a onde estão os objetos no meu viewmodel. A única solução que eu poderia pensar para isso era modificar a string HTML (ou criar a árvore DOM) com atributos. Eu não me importo de usar um motor de modelo diferente.

Basicamente, senti fortemente que estava complicando o problema e que há uma solução simples.

Nota:&nbsp;Por favor, não forneça respostas que usem bibliotecas externas, especialmente aquelas que são milhares de linhas de código. Eu usei (e gosto!) AngularJS e KnockoutJS. Eu realmente não quero respostas no formulário 'use framework x'. Idealmente, eu gostaria de um futuro leitor que não saiba como usar muitos frameworks para entender como implementar ele mesmo a vinculação de dados bidirecional. Eu não espero umcompleto&nbsp;resposta, mas um que obtém a ideia.