js实现双向数据绑定
2017-10-10 17:55
411 查看
需求
现在的框架都讲究什么单向绑定,双向绑定的都是什么东西?- 单向数据绑定:指的是我们先把模板写好,然后把模板和数据(数据可能来自后台)整合到一起形成HTML代码,然后把这段HTML代码插入到文档流里面。
- 双向数据绑定:数据模型(Module)和视图(View)之间的双向绑定。就是我不管修改数据模型的相关数据,还是视图上的数据,相对应的数据也会跟着更新。
实现原理
主要的就是事件的绑定。- 在视图层(View)上,可以绑定keyup事件,来更新数据模型
- 在数据模型上面利用Object.defineProperty()方法定义对象的set方法,在触发对象属性设置时,将view层的数据也修改掉。
案例代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <input type="text" id="myinput" > <script> var input = document.getElementById("myinput"); var obj = {}; Object.defineProperty(obj, "input", { get: function () { return input.value; }, set: function (val) { input.value = val; changeCallback(input.value); } }); input.onkeyup = function () { obj.input = input.value; }; function changeCallback(val) { console.log("这里是不管view层,还是module层修改后的回调,最后设置的值是"+val); } </script> </body> </html>
思路
首先,我们先使用Object.defineProperty()方法设置obj的set方法,只要修改obj的input属性,就会触发这个这个set方法,然后触发回调,这就实现了module层的数据绑定。然后,再input上绑定keyup事件,实现了view层的绑定。
只要两者有一个修改,不管input的value值,还是获取obj的input属性,都是获取最新修改的值。
这应该是最简单的思路了。
相关文章推荐
- 原生JS实现angular的双向数据绑定
- Vue.js实现双向数据绑定(表单自动赋值、表单自动取值)
- 原生js实现双向数据绑定
- JS原生数据双向绑定实现代码
- angular.js双向数据绑定实现动画特效
- Vue.js实现双向数据绑定方法(表单自动赋值、表单自动取值)
- 使用原生js onkeyup+jQuery实现简单的双向数据绑定
- Agularjs妙用双向数据绑定实现手风琴效果
- 用原生js实现数据双向绑定
- vue.js双向数据绑定原理解析及模拟demo的实现
- js原生代码实现数据双向绑定
- vue.js--基础 事件结合双向数据绑定实现todolist,增加和删除功能
- 原生js简单实现双向数据绑定原理
- vue.js使用v-model指令实现的数据双向绑定功能示例
- vue.js利用defineProperty实现数据的双向绑定
- 实现非常简单的js双向数据绑定
- js实现数据双向绑定
- Vue.js双向数据绑定实现
- 如何用javascript实现双向数据绑定 / Backbone.js简单入门范例
- 实现非常简单的js双向数据绑定