- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
双向数据绑定指的是当对象的属性发生变化时能够同时改变对应的UI,反之亦然。换句话说,如果我们有一个user对象,这个对象有一个name属性,无论何时你对user.name设置了一个新值,UI也会展示这个新的值。同样的,如果UI包含一个用于数据用户名字的输入框,输入一个新值也会导致user对象的name属性发生相应的改变。许多流行的javascript框架,像Ember.js,Angular.js或者KnockoutJS都会把双向数据绑定作为其中的主要特性来宣传。这并不意味着从头开始实现它很难,也不意味着当我们需要这种功能的时候,使用这些框架是我们唯一的选择。内部的潜在思想事实上是相当基础的,实现它可以归纳为以下三点:我们需要一种方式确定哪个UI元素绑定在哪个属性上。我们需要监控属性和UI的变化我们需要把所有绑定的对象和UI元素的变化传播出去。尽管有好多种方式去实现这几点,一种简单高效的方法是我们通过发布订阅者模式来实现。方法很简单:我们可以使用定制的data属性作为HTML代码中需要绑定的属性。所有的绑定在一起的Javascript对象和DOM元素将会订阅这个发布订阅对象。任何时候我们检测到无论是Javascript对象亦或是HTML的input元素的变化,我们都是把事件代理传递给发布订阅对象,然后通过它把所有发生在绑定的对象和元素的的变化传递和广播出去。一个用jQuery实现的简单例子通过jQuery实现我们上面讨论的东西是相当简单明了的,因为作为一个流行的库,它让我们很简单的实现订阅和发布DOM事件,同时我们也可以定制一个:functionDataBinder(object_id){// Use a jQuery object as simple PubSubvarpubSub=jQuery({});// We expect a `data` element specifying the binding// in the form:data-bind-object_id=property_namevardata_attr=bind-+object_id,message=object_id+:change;// Listen to chagne events on elements with data-binding attribute and proxy// then to the PubSub, so that the change is broadcasted to all connected objectsjQuery(document).on(change,[data-]+data_attr+],function(eve){var$input=jQuery(this);pubSub.trigger(message,[$input.data(data_attr),$input.val()]); });// PubSub propagates chagnes to all bound elemetns,setting value of// input tags or HTML content of other tagspubSub.on(message,function(evt,prop_name,new_val){jQuery([data-+data_attr+=+prop_name+]).each(function(){var$bound=jQuery(this);if($bound.is()){$bound.val(new_val);}else{$bound.html(new_val); } }); });returnpubSub;}至于javascript对象,下面是最小化的user数据模型实现的例子:functionUser(uid){var binder=newDataBinder(uid),user={attributes:{},// The attribute setter publish changes using the DataBinderPubSubset:function(attr_name,val){this.attributes[attr_name]=val;binder.trigger(uid+:change,[attr_name,val,this]); },get:function(attr_name){returnthis.attributes[attr_name]; }, _binder:binder };// Subscribe to PubSubbin
您可能关注的文档
最近下载
- 设计制作一个产生正弦波-方波-三角波函数转换器.doc VIP
- 选煤厂安全规程课件.ppt VIP
- The Institute of Internal Auditors 国际内部审计师协会 内部审计执行指南 2017 执行指南.pdf
- 借款合同借款合同.docx VIP
- 2018职业暴露应急演练记录..doc VIP
- 信息化项目安全保障措施.docx VIP
- 第十章 珍爱生命-心理危机干预与幸福人生 课件《大学生心理健康教育(第二版)》(高教版).pptx VIP
- 高等数学(一)(国防科技大学)中国大学MOOC慕课 期末考试客观题答案.pdf VIP
- 建伍TH-F6 F7中文说明书手册.doc VIP
- 残疾人社会工作教学课件 余艳萍 秦琴-第9章 残疾人个案工作模式及运用.pptx VIP
原创力文档


文档评论(0)