JavaSript数据双向绑定
2017-10-09 16:40
141 查看
数据双向绑定
顾名思义,数据源变动绑定数据对象也应该变动下面是我认为的数据绑定较为简单的实现
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>数据双向绑定</title> <style> div{ padding: 10px; margin: 10px 0 ; } div:nth-child(even){ background: #ccc; } </style> </head> <body> <input type="text" id="input2"> <div m-model="data" ></div> <div m-model="data"></div> <div m-model="data"></div> <div m-model="data"></div> <script> //事件聚合理论 负责事件回调 function Event(name){ var handlers = []; this.getName = function(){ return name; } this.addHandler = function(handler){ handlers.push(handler); } this.removeHandler = function(handler){ handler.filter((items)=>{ return items!==handler }) } this.fire = function(eventArgs){ handlers.forEach((h)=>{ h(eventArgs); }) } } function EventAggregator(){ var events = []; function getEvent(eventName){ return events.filter((item)=>{ return item.getName()==eventName; }) } //发布方法 this.publish = function(eventName,eventArgs){ var event = getEvent(eventName)[0]; if(!event){ event = new Event(eventName); } event.fire(eventArgs); } //注册方法 this.subscribe = function(eventName,handler){ var event = getEvent(eventName)[0]; if(!event){ event = new Event(eventName); events.push(event); } event.addHandler(handler); } } function DataContorller(data,eventArgs){ //注册数据改变方法 eventArgs.subscribe('dataChange',function(eventArgs){ var elems = document.querySelectorAll("[m-model="+dataChange+"]"); elems.forEach((elem)=>{ elem.innerHTML = eventArgs.data; }) }) } function DataBinder(eventArgs){ function dataChange(){ var data = this.value; eventArgs.publish('dataChange',{data:data}) } document.getElementById('input2').addEventListener('input',dataChange,false); } var eventAggregator = new EventAggregator(), dataContorller = new DataContorller("data",eventAggregator), DataBinder = new DataBinder(eventAggregator); </script> </body> </html>
虽然尝试着使用观察者模式实现了,但总感觉整个代码是为了实现而实现
不知道是哪里出了问题。
希望有大神能指点迷津,先谢过。
相关文章推荐
- Vue.js每天必学之数据双向绑定
- vue.js组件之间通讯的数据双向绑定----父亲把数据传递给儿子,儿子更改数据后,重新发送给父亲,父亲数据更改后,属性会重新发送个儿子,儿子刷新新数据
- Vue双向数据绑定原理
- angular数据双向绑定原理
- AngularJS第二课:双向数据绑定
- 从单向数据到双向数据绑定
- VueJS实现双向数据绑定:v-model
- vue.js双向数据绑定
- VUE-Table上绑定Input通过render实现双向绑定数据
- 3、AngularJs的双向数据绑定
- 详解Vue双向数据绑定原理解析
- angular数据双向绑定解密
- AngularJs学习记录--双向数据绑定的HelloWorld!
- Vue.js第一天学习笔记(数据的双向绑定、常用指令)
- 使用脏检查机制实现数据的双向绑定
- JavaScript 进阶之深入理解数据双向绑定
- AngularJS中的双向数据绑定 ng-bind,ngshow,ng-hide,ng-class,ngAnimate
- 用jquery实现的简单数据双向绑定
- angularJs的双向数据绑定,简单实用
- angular 双向数据绑定 初始化页面hide后,就绑定失效了