




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、深入浅析knockout源码分析之订阅knockout是一款很优秀的javascript库,它可以帮助 你仅使用一个清晰整洁的底层数据模型(datamodel )即可 创建一个富文本且具有良好的显示和编辑功能的用户界面。 这篇文章主要介绍了 knockout源码分析之订阅的相关资料, 需要的朋友可以参考下 knockout, js 是什么?knockout是一款很优秀的javascript库,它可以帮助 你仅使用一个清晰整洁的底层数据模型(d atamodel)即可 创建一个富文本且具有良好的显示和编辑功能的用户界面。 任何时候你的局部ui内容需要自动更新(比如:依赖于用 户行为的改变或者外部
2、的数据源发生变化),k0都可以很简 单的帮你实现,并且非常易于维护。一、主类关系图二、类职责2.1、observab le (普通监控对象类) observabl e (他其是一个func tion)的内部实现:1. 首先声明一个名为observable的fn (这个可以说是 一个类)2. 增加一个ko惟一的latest value (最新值)属性来存储形参传入的值3如果支持原生proto属性就利用hasownprop erty来判断属性是否存在的方式来继承,判断proto代 码(在ut订s类中)varcansetp rototype= ( _proto_: instanceo farray)
3、;4 . ko. subscri ba.ble 的 fn 属性的init 方法对 obse rvable进行初始化(主要增加订阅、发布相关属性)5. obs ervable再继承o bservabelfn相关属性和方法 (obs ervabelfn包含观察、值变化前、值变化后的执行策 略)/def ineproto typeforobse rvablesvaro bservablefn =j equali tycomparer,: valuesarep rimitiveand equal,pee k:function( ) returnthi sobservabl elatestvalu e;
4、,valuehasmutated:function() this' notifysubscribe rs (this o bservablela testvalue) ;, valuew illmutate:f unction()t his' notify subscribers ' (thisobs ervablelate stvalue,? b eforechange ') ;;6返回observable方法的实现(如果传入参数就是设置,无参则是获取)7、此类还提供了 hasprototy pe (判断指定实例是否 拥有此属性)、isob servable
5、(判断指定实例是否为监控对 象)、iswriteab leobservabl e (是否为可写的监控对象)。2. 2、ob servablearr ay (数组监控对象类)1先执行ko. o bservable方法,让其对象变为一个可 监控的类(名为resul t);2.然后扩展ko. observab learray中的fn对象 (ko. obser vabelarray的fn重写了数组相关的操作方法, 如i remove、push 等)3 通过 ext ends 扩展一个方法(tracka rraychanage s, 详细介绍见2. 5)4.返回扩展好的res ult对象。ko. obs
6、ervoblea rray=functi on (initialv alues) in itialvalues =initialval ues | | ;i f(ty peof ini ti alvalues!二'object' | ! (' length,i ninitialval ues)thro wnewerror ( theargument passedwheni nitializing anobservabl earraymustb eanarray,or null, orunde fined“);varresuit二k o. observabl e (ini
7、tialva lues);ko. utils.setpr ototypeofor extend (resuit, ko. obser vablearray fn );returnresuit.extend(,tr ackarraychanges' :true);2. 3、s ubscribable (订阅对象类)1实现订阅、发布的功能模块,对observab le> observab learray来说是必不可少的基类2.这里有一个subscri ble方法,用于对监控对象变化 的订阅接口,开发则可以用此继切入点subscribe: function(ca llback, cal
8、l backtarget, event) vars elf=this;event=event |defaultev ent;varbo undcallback =callbackta rget?callba ck. bind (cal ibacktarget ) : callback;varsubscr iption二newk o. subscript ion (self,bo undcallback , function() ko.utils . arrayremov eltem(self. _subscripti onsevent, subscriptio n);if (sei f. af
9、tersubs criptionrem ove)seif. aftersubscr iptionremov e (event););if (seif beforesubsc riptionadd)seif. befo resubscript ionadd(even t);if (! se if. _subscri ptions even t)seif. .subscriptio ns event=;seif._s ubscription sevent.pu sh(subscrip tion); retur nsubscripti on;3. ext end:此方法用于添加extends方法加入
10、的扩展 类 (女口 obser vablearray. changetrack ing 扩展类)4. extend扩展的方法,会在监控对象注册后立即执行, 传入参数为ta rget (当前对象)、options (ext end调用 时传入的参数)5. extend就是安装扩展的方法,他会立即执行扩展中 的代码。2. 4> extend s (扩展监控对象类)1. ko默认的扩展集合2. 提供一个appl yextenders方法来安装扩展fun ctionapplye xtenders (re questedexte nders) vart arget=this;if (reques
11、tedextender s) ko.uti is.objectfo reach(reque stedextenders,function (key, value) varexten derhandler=ko. extender s key;if (typeofexte nderhandler 二二'function ') target 二extenderha ndler (targe t, value) | 11 arget;);returntarge t;2.5、 ob servablearr ay. changetr acking (扩展监控 对象的一个具体实现)1此扩展主要实现对数组变化的监控,然后计算数组
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年山东省烟台市、龙口市英语七下期中学业水平测试试题含答案
- 数字化运营视角下的2025年商业地产客户满意度提升策略报告
- 2025年虚拟偶像产业发展趋势与市场分析报告
- 文化遗产数字化展示与传播在数字博物馆建设中的应用策略报告
- 2025年广东省佛山市南海区新芳华学校八下英语期末调研模拟试题含答案
- 2025年医药企业CRO研发外包的合作模式与项目风险控制报告
- 准备培训课件的通知
- 新能源汽车生产基地产业竞争力评估与初步设计报告
- 爆破考试试题及答案
- 2025年金融业人工智能算法审计在审计效率提升中的实践报告
- 《环保节能培训》课件
- 视网膜静脉阻塞护理查房
- 员工健康管理规定
- 飞机结构设计课件
- JCT1041-2007 混凝土裂缝用环氧树脂灌浆材料
- 赤峰高新技术产业开发区元宝山产业园(原元宝山综合产业园区区块)地质灾害危险性评估报告
- 2023年07月山东潍坊市中心血站招考聘用5人上岸笔试历年难、易错点考题附带参考答案与详解
- 建筑固定消防设施课件
- USSF-美国太空部队数字服务远景(英文)-2021.5-17正式版
- 《全国医疗服务价格项目规范》(2022版)
- 沧州市河间市2023年数学六下期末综合测试模拟试题含解析
评论
0/150
提交评论