代码如下:
span style=' font-family :次New Roman'font-size :14 pxdeep='7 '!DOCTYPE html html lang=' en ' head meta charset=' UTF-8 '标题演示/标题脚本函数DataBinder(object_id ) { //创建一个简单的PubSub对象var pubSub={ callbacks: {,函数(msg,回调){ this。回调[ msg ]=这个。回调[msg]| |[];这个。回调[消息].推送(回调);},publish:函数{这个。回调[ msg ]=这个。回调[msg]| |[];对于(var i=0,len=this。回调[消息].长度;我透镜;我){这个。回调[消息][我].应用(这个,参数);} } },data_attr='bind-' object_id,message=object_id ':input ',timeInchange handler=function(evt){ var target=evt。目标| | evt。srcelement,//IE8兼容性prop _ name=目标。getattribute(data _ attr);if (prop_name prop_name!==' '){ clear TiME out(TiME in);timeIn=setTimeout(函数(){ PubSub。发布(消息,prop_name,目标。值);},50);} };//如果(文档。addeventlistener){ document。addeventlistener(' input ',changeHandler,false),则侦听更改事件并代理到PubSub} else { //IE8使用attachEvent而不是添加事件侦听器文档。attachEvent('在输入时',更改处理程序);} //PubSub将更改传播到所有绑定元素pubSub.on(消息,函数(evt,prop_name,new _ val){ var elements=document。query selectorall([' data _ attr '=' prop _ name ']'),tag _ namefor (var i=0,len=elements.length我透镜;I){ tag _ name=elements[I]。标记名。tolowercase();if(tag _ name==' input ' | | tag _ name==' text area ' | | tag _ name==' select '){ elements[I].value=new _ val} else { elements[ i ].innerHTML=new _ val } } });返回pubSub}函数DBind(uid){ var binder=new DataBinder(uid),用户={ //.attributes: {},set:函数(attr_name,val){ this。属性[attr _ name]=val;//使用“发布”方法binder.publish(uid ':input ',attr_name,val,this);},get:函数(attr _ name){ 0返回这个。属性[attr _ name];},_ binder : binder };//订阅PubSub binder.on(uid ':input ',函数(evt,attr_name,new_val,initiator ) { if (initiator!==user ) { user.set(attr_name,new _ val);} });返回用户;}/脚本/头体输入类型=' text ' bind-1=' name '/span bind-1=' name '/span script var DBind=new DBind(1);DBind.set('name ',' ');/脚本/正文/html/span效果示例:
总结
以上所述是小编给大家介绍的射流研究…原生数据双向绑定实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!