如何在 JavaScript 中实现 DOM 数据绑定
请把这个问题视为严格的教育问题。我仍然有兴趣听到新的答案和想法来实现这一点
tl;博士
如何使用 JavaScript 实现双向数据绑定?
数据绑定到 DOM
通过数据绑定到DOM,我的意思是例如,具有具有属性的JavaScript对象。然后有一个DOM元素(例如),当DOM元素改变,变化,反之亦然(也就是说,我的意思是双向数据绑定)。a
b
<input>
a
这是AngularJS关于它是什么样子的图表:
所以基本上我有类似于以下的JavaScript:
var a = {b:3};
然后是输入(或其他形式)元素,如:
<input type='text' value=''>
我希望输入的值是 的值(例如),当输入文本更改时,我也想更改。当 JavaScript 中发生更改时,输入也会更改。a.b
a.b
a.b
问题
在普通的JavaScript中实现这一点有哪些基本技术?
具体来说,我想要一个很好的答案来参考:
- 绑定如何为对象工作?
- 倾听表单的变化如何工作?
- 是否可以以简单的方式仅在模板级别修改HTML?我不想在HTML文档本身中跟踪绑定,而只在JavaScript中跟踪绑定(使用DOM事件,JavaScript保持对所用DOM元素的引用)。
我试过了什么?
我是Mustache的忠实粉丝,所以我尝试用它来模板化。但是,在尝试执行数据绑定本身时,我遇到了问题,因为Mustache将HTML处理为字符串,因此在获得其结果后,我没有引用视图模型中对象的位置。我能想到的唯一解决方法是使用属性修改HTML字符串(或创建的DOM树)本身。我不介意使用不同的模板引擎。
基本上,我有一种强烈的感觉,我正在使手头的问题复杂化,并且有一个简单的解决方案。
注意:请不要提供使用外部库的答案,尤其是那些包含数千行代码的答案。我用过(并且喜欢!AngularJS 和 KnockoutJS。我真的不想要“使用框架x”形式的答案。理想情况下,我希望未来的读者不知道如何使用许多框架来掌握如何实现双向数据绑定。我不期望一个完整的答案,但一个能把这个想法传达出去的答案。