双向数据绑定

Posted 代码顽童

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了双向数据绑定相关的知识,希望对你有一定的参考价值。

<textarea type="number"  data-bind-123="name" /></textarea><br><br>
<textarea type="number"  data-bind-456="name1" /></textarea>
<script src="http://cdn.bootcss.com/jquery/3.1.0/jquery.min.js"></script>
<script>
// object_id 对象id
function DataBinder(object_id){
  //使用jQuery对象做一个简单订阅
  var pubSub=jQuery({});
  var data_attr="bind-"+object_id,
    message=object_id+":change";
  //监听change事件
  jQuery(document).on("change","[data-"+data_attr+"]",function(eve){
    var $input=jQuery(this);
 	//触发事件
    pubSub.trigger(message,[$input.data(data_attr),$input.val()]);
  });
  //
  pubSub.on(message,function(evt,prop_name,new_val){
  	//
    jQuery("[data-"+data_attr+"="+prop_name+"]").each(function(){
      var $bound=jQuery(this);
      if($bound.is("")){
        $bound.html(new_val);
      }else{
        $bound.html(new_val);
      }
    });
  });
  return pubSub;
}
//
function User(uid){
  var binder=new DataBinder(uid),
    user={
      attributes:{},
      set:function(attr_name,val){
        this.attributes[attr_name]=val;
        binder.trigger(uid+":change",[attr_name,val,this]);
      },
      get:function(attr_name){
        return this.attributes[attr_name];
      },
      _binder:binder
    };
  // Subscribe to PubSub
  binder.on(uid+":change",function(evt,attr_name,new_val,initiator){
    if(initiator!==user){
      user.set(attr_name,new_val);
    }
  });
  return user;
}
//
var user=new User(123);
user.set("name","Wolfgang");
//
var user1=new User(456);
user1.set("name1","Wolfgang789");
//
console.log(user.get("name"));
console.log(user1.get("name1"));
</script>

通过change事件来实现,1.试图端change触发修改服务端dade, 服务端dade修改触发change修改页面。

以上是关于双向数据绑定的主要内容,如果未能解决你的问题,请参考以下文章

双向数据绑定和单向数据绑定解释

原生js实现数据双向绑定

vue双向绑定原理

Vue2从入门到精通详解Vue数据双向绑定原理及手动实现双向绑定

双向数据绑定和单项数据绑定的认识

vue数据双向绑定原理-observer