深入浅析knockout源码分析之订阅

上传人:bin****86 文档编号:59392394 上传时间:2018-11-07 格式:DOCX 页数:6 大小:17.67KB
返回 下载 相关 举报
深入浅析knockout源码分析之订阅_第1页
第1页 / 共6页
深入浅析knockout源码分析之订阅_第2页
第2页 / 共6页
深入浅析knockout源码分析之订阅_第3页
第3页 / 共6页
深入浅析knockout源码分析之订阅_第4页
第4页 / 共6页
深入浅析knockout源码分析之订阅_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《深入浅析knockout源码分析之订阅》由会员分享,可在线阅读,更多相关《深入浅析knockout源码分析之订阅(6页珍藏版)》请在金锄头文库上搜索。

1、我真正系统地接触和学习党的基本知识是在这次中级党校的培训班上。通过学习,了解了党的发展历程,对党的性质、宗旨、任务等基本知识有了进一步的了解深入浅析knockout源码分析之订阅Knockout是一款很优秀的JavaScript库,它可以帮助你仅使用一个清晰整洁的底层数据模型(data model)即可创建一个富文本且具有良好的显示和编辑功能的用户界面。这篇文章主要介绍了knockout源码分析之订阅的相关资料,需要的朋友可以参考下Knockout.js是什么?Knockout是一款很优秀的JavaScript库,它可以帮助你仅使用一个清晰整洁的底层数据模型(data model)即可创建一个

2、富文本且具有良好的显示和编辑功能的用户界面。任何时候你的局部UI内容需要自动更新(比如:依赖于用户行为的改变或者外部的数据源发生变化),KO都可以很简单的帮你实现,并且非常易于维护。一、主类关系图二、类职责2.1、observable(普通监控对象类)observable(他其是一个function)的内部实现:1.首先声明一个名为observable的fn(这个可以说是一个类)2.增加一个ko惟一的latestValue(最新值)属性来存储形参传入的值3.如果支持原生_proto_属性就利用hasOwnProperty来判断属性是否存在的方式来继承,判断_proto_代码(在utils类中)

3、var canSetPrototype = ( _proto_: instanceof Array);4.ko.subscribable的fn属性的init方法对observable进行初始化(主要增加订阅、发布相关属性)5.observable再继承observabelFn相关属性和方法(observabelFn包含观察、值变化前、值变化后的执行策略)/ Define prototype for observablesvar observableFn = equalityComparer: valuesArePrimitiveAndEqual,peek: function() return

4、thisobservableLatestValue; ,valueHasMutated: function () thisnotifySubscribers(thisobservableLatestValue); ,valueWillMutate: function () thisnotifySubscribers(thisobservableLatestValue, beforeChange); ;6.返回observable方法的实现(如果传入参数就是设置,无参则是获取)7、此类还提供了hasPrototype(判断指定实例是否拥有此属性)、isObservable(判断指定实例是否为监控

5、对象)、isWriteableObservable(是否为可写的监控对象)。2.2、observableArray(数组监控对象类)1.先执行ko.observable方法,让其对象变为一个可监控的类(名为result);2.然后扩展ko.observableArray中的fn对象(ko.observabelArray的fn重写了数组相关的操作方法,如remove、push等)3.通过extends扩展一个方法(trackArrayChanages,详细介绍见2.5)4.返回扩展好的result对象。ko.observableArray = function (initialValues) i

6、nitialValues = initialValues | ;if (typeof initialValues != object | !(length in initialValues)throw new Error(The argument passed when initializing an observable array must be an array, or null, or undefined.);var result = ko.observable(initialValues);ko.utils.setPrototypeOfOrExtend(result, ko.obse

7、rvableArrayfn);return result.extend(trackArrayChanges:true);2.3、subscribable(订阅对象类)1.实现订阅、发布的功能模块,对observable、observableArray来说是必不可少的基类2.这里有一个subscrible方法,用于对监控对象变化的订阅接口,开发则可以用此继切入点subscribe: function (callback, callbackTarget, event) var self = this;event = event | defaultEvent;var boundCallback =

8、callbackTarget ? callback.bind(callbackTarget) : callback;var subscription = new ko.subscription(self, boundCallback, function () ko.utils.arrayRemoveItem(self._subscriptionsevent, subscription);if (self.afterSubscriptionRemove)self.afterSubscriptionRemove(event););if (self.beforeSubscriptionAdd)sel

9、f.beforeSubscriptionAdd(event);if (!self._subscriptionsevent)self._subscriptionsevent = ;self._subscriptionsevent.push(subscription);return subscription;3.extend:此方法用于添加extends方法加入的扩展类(如observableArray.changeTracking扩展类)4.extend扩展的方法,会在监控对象注册后立即执行,传入参数为target(当前对象)、options(extend调用时传入的参数)5.extend就是安

10、装扩展的方法,他会立即执行扩展中的代码。2.4、extends(扩展监控对象类)1.ko默认的扩展集合2.提供一个applyExtenders方法来安装扩展function applyExtenders(requestedExtenders) var target = this;if (requestedExtenders) ko.utils.objectForEach(requestedExtenders, function(key, value) var extenderHandler = ko.extenderskey;if (typeof extenderHandler = funct

11、ion) target = extenderHandler(target, value) | target;);return target;2.5、observableArray.changeTracking(扩展监控对象的一个具体实现)1.此扩展主要实现对数组变化的监控,然后计算数组的差异,以及触发相关的订阅事件2.cacheDiffForKnownOperation:缓存对数组的操作,以备差异比较3.beforeSubscriptionAdd、afterSubscriptionRemove相关订阅(还没完全理解作用)。以上所述是小编给大家介绍的深入浅析knockout源码分析之订阅,希望对大家有所帮助 对党的认识也有了进一步的提高。才真正体会到了中国共产党的伟大、光荣和正确,更感到只有中国共产党是全中国最广大人民利益的忠实代表

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 总结/报告

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号