何为双向数据绑定?

双向数据绑定即为
1、当与用户交互时,用户修改视图上的数据(如文本框等),model中的数据也会跟着改变;
2、当model数据发生改变时,视图上渲染了该数据的地方也会跟着更新。

如何实现双向数据绑定?

image.png
数据劫持、观察者Observer、订阅者Watcher、Compile解析器

页面初次渲染

1、使用递归劫持数据,为每个对象以及每个对象的属性添加getter和setter方法(使用ES5的Object.defineProperty);
2、compile解析模板,将模板的变量解析成data中的数据;
3、为节点添加监听数据的订阅者watcher,并且自身还有update更新函数。

view改变->model更新

1、view更新,触发事件;
2、在事件回调中调用数据的setter方法,更新model中的数据;
3、在setter方法中,数据的oberve观察到了数据的变化,向订阅者们发出通知dep.notice();
4、订阅者们收到通知,并调用自身的update()方法,触发Compile中绑定的回调,重新解析模板。

model改变->view更新

以上的3-4步

(自己的理解,如有问题,请指出!)


要出家的键盘
1 声望0 粉丝