Knockout v3.4.0 中文版教程-9-计算监控-API参考
5.参考
下面的内容描述了如何构建和使用计算监控。
1. 构建一个计算监控
可以用如下的形式构建一个计算监控:
- ko.computed( evaluator [, targetObject, options] ) — 这是最常见的构建计算监控的形式。
- evaluator — 一个用来计算当前计算监控值的函数
- targetObject — 如果提供该值,该值定义了当KO请求你的回调函数时函数内部
this的值。请看管理this章节查看更多信息。 - options — 一个包含计算监控特性属性设置的对象,下面有详细列表。
- ko.computed( options ) — 一个参数形式创建的计算监控接收一个javascript对象并包含如下属性。
- read - 必要属性。一个用于计算当前计算监控当前值的函数。
- write — 可选。如果有,计算监控变为可写。这是一个函数,接收其他代码想要写入计算监控的值。具体功能由你的自定义逻辑对传入值的处理,一般是把值传回底层依赖。
- owner — 可选。如果有,定义当KO请求你的
read或write函数时函数内部this的值。 - pure — 可选。如果选项为
true,计算监控会变为纯计算监控。该项可由ko.pureComputed来构造计算监控来替代。 - deferEvaluation —可选。如果该项为
true,计算监控的值不会进行求值,直到确实有某些代码访问它的值或手动订阅它。默认情况下,计算监控在构建之后立即进行求值。 - disposeWhen — 可选。如果选项为
true,该函数在每次重新求值之前执行,用于决定计算监控是否应该被释放。结果为true会触发释放所有计算监控。 - disposeWhenNodeIsRemoved — 可选。如果有,计算监控的释放会在规定的DOM节点被KO移除的时候触发。此功能是用来处理计算监控绑定节点,节点通过模板和控制流绑定删除时释放计算监控。
- ko.pureComputed( evaluator [, targetObject] ) — 用提供的求值函数和用来定义this的可选对象来构建纯计算监控。不像
ko.computed,此方法不接受可选参数。 - ko.pureComputed( options ) — 通过提供一个javascript对象来构建一个纯计算监控。对象接受
read,write,和owner选项如前面所述。
2. 使用计算监控
一个计算监控提供如下一些方法:
- dispose() —手动释放计算监控,清除所有依赖的订阅。如果你想停止正在刷新数据的计算监控或者清理由于存在依赖的监控而不能清理的计算监控的内存。
- extend(extenders) —给计算监控提供扩展器。
- getDependenciesCount() — 返回当前计算监控的依赖数量。
- getSubscriptionsCount( [event] ) — 返回计算监控当前订阅的数量(无论是来自计算监控还是手动订阅)。可选的,传入一个事件名(比如
change)会返回当前事件的订阅数量。 - isActive() — 返回计算监控的值在之后是否可能会被更新。如果计算监控没有依赖,会处于闲置状态。
- peek() —返回计算监控当前值并不创建依赖。
- subscribe( callback [,callbackTarget, event] ) — 注册一个手动订阅来接收计算监控改变的通知。
3. 确定监控类型
要检测一个属性是监控、计算监控还是其他,可以使用如下方法:
- ko.isObservable — 如果是监控对象,监控数组和计算监控,返回
true。 - ko.isWritableObservable —如果是监控对象,监控数组和可写计算监控,返回
true(也可写作ko.isWriteableObservable)。 - ko.isComputed — 如果是计算监控,返回
true。 - ko.isPureComputed — 如果是纯计算监控,返回
true。
4. 使用计算监控上下文
在执行计算监控求值函数期间,你能访问ko.computedContext来获取当前计算监控属性的信息。它提供了如下方法:
isInitial() —如果计算监控是第一次调用求值函数,该函数返回
true,否则返回false。对于纯计算监控,该方法一直是undefined。getDependenciesCount() — 返回在当前求值过程中计算监控被检测到的依赖数量。
*注意:
ko.computedContext.getDependenciesCount()等同于调用计算监控本身调用getDependenciesCount()。该方法也存在的原因是让ko.computedContext提供一种方式在计算监控构建完成之前,即第一次求值之前可以统计依赖数量。
例子:
var myComputed = ko.computed(function() {
// ... Omitted: read some data that might be observable ...
// Now let's inspect ko.computedContext
var isFirstEvaluation = ko.computedContext.isInitial(),
dependencyCount = ko.computedContext.getDependenciesCount(),
console.log("Evaluating " + (isFirstEvaluation ? "for the first time" : "again"));
console.log("By now, this computed has " + dependencyCount + " dependencies");
// ... Omitted: return the result ...
});
这些函数通常只会在某些复杂场景特别有用,比如当计算监控的主要目的是触发它的求值函数的一些副作用,你只想在第一次运行的时候执行一些配置逻辑,或者仅仅在它至少有一个依赖的情况下执行(因此可能在之后会被重新调用)。大多数计算监控属性不需要关心之前它们是否执行过,或者它们有多少依赖。
Knockout v3.4.0 中文版教程-9-计算监控-API参考的更多相关文章
- Knockout v3.4.0 中文版教程-6-计算监控-可写的计算监控
2.可写的计算监控 初学者可能想要跳过本节 - 可写的计算监控是相当高级的部分,在大多数情况下不是必需的. 通常,计算监控是一个通过其他监控值计算出的值,因此是只读的. 令人惊讶的是,可以使计算监控值 ...
- Knockout v3.4.0 中文版教程-8-计算监控-纯计算属性
4.纯计算属性 纯计算监控在KO 3.2.0中开始引入,比大多数应用程序使计算监控有更大的性能提升和内存优化.这是因为在自身没有订阅的时候不会保持订阅状态.特性如下 阻止内存泄露 - 避免在应用程序里 ...
- Knockout v3.4.0 中文版教程-5-计算监控-使用计算监控
3. 计算监控 1.使用计算监控 如果你有一个监控的属性firstName和另一个lastName,但你想显示全名怎么办? 这就是引入计算监控的原因-这是依赖于一个或多个其他的observables函 ...
- Knockout v3.4.0 中文版教程-7-计算监控-依赖跟踪如何工作
3.依赖跟踪如何工作 初学者不需要知道这一点,但更高级的开发人员将想知道为我们怎么实现KO自动跟踪依赖性和自动更新UI的正确部分... 它其实相当简单优雅,跟踪算法如下: 当你定义一个计算监控,KO立 ...
- Knockout v3.4.0 中文版教程-4-通过监控数组工作
2.通过监控数组工作 1. 监控数组 如果你想检测或者响应一个对象的改变,你用observables.如果你想检测和响应一个集合的改变,使用observableArray.这个在很多情况下都非常有用, ...
- Knockout v3.4.0 中文版教程-16-控制流-foreach绑定
2. 控制流 1. foreach绑定 目的 foreach绑定会遍历一个数组,为每个数组项生成重复的元素标记结构并做关联.这在渲染列表或表格的时候特别有用. 假设你的数组是一个监控数组,之后无论你进 ...
- Knockout v3.4.0 中文版教程-1-入门和安装
英文原版教程:http://knockoutjs.com/documentation/introduction.html 注:此教程根据英文原版翻译,仅作练习,如有不足或错误,请指正 说明: 对原文中 ...
- Knockout v3.4.0 中文版教程-11-控制文本内容和外观-text绑定
2. text绑定 目的 text绑定把传入的参数通过关联的DOM元素来显示文本值. 通常这对像<span>或<em>标签等使用,但技术上你可以对任何元素使用该绑定. 例子 T ...
- Knockout v3.4.0 中文版教程-14-控制文本内容和外观-style绑定
5. style绑定 目的 style绑定用来给关联的DOM元素添加或移除一个或多个样式值.在如下情况很有用,比如,当某些值为负时,高亮显示,或者设置容器元素的宽度来匹配数值的改变. (注意:如果你不 ...
随机推荐
- Linux下Java运行.class文件,报错找不到或无法加载主类
classpath配置的错误,所以找不到.class文件. 原先的etc/profile中的classpath配置 export CLASSPATH=$JAVA_HOME/lib/tools.jar ...
- 118 Pascal's Triangle 帕斯卡三角形 杨辉三角形
给定 numRows, 生成帕斯卡三角形的前 numRows 行.例如, 给定 numRows = 5,返回[ [1], [1,1], [1,2,1], [1,3,3,1], [1 ...
- Panoramic Photography
http://codeforces.com/gym/101149/problem/J 给出n个数字,表示第i条街有a[i]个照片存在过,其中,每个照片可以覆盖一段连续的区间, 就是一张照片可以覆盖[2 ...
- CentOS 7.4升级curl和git到最新版本
升级curl和git到最新版本 [root@jenkins ~]# yum install -y curl-devel expat-devel gettext-devel openssl-devel ...
- nconf修改密码
修改nconf登录界面密码 [root@Cnyunwei config]# vi .file_accounts.php <?php/*## User/Password file for simp ...
- cat 参数
-A 相当于-vET的整合参数 -E 将结尾的换行符$显示出来 -n 显示行号 -T 将tab键以^T显示出来 -v 列出一些看不出来的特殊字符
- github入门一
一.首先安装gitbash(自行百度)我使用的版本是Git-2.12.2.2-64-bit.exe 二.配置gitbash本地客户端 1.初始设置 1.1.设置姓名和邮箱地址 git config - ...
- Java文件操作系列[3]——使用jacob操作word文档
Java对word文档的操作需要通过第三方组件实现,例如jacob.iText.POI和java2word等.jacob组件的功能最强大,可以操作word,Excel等格式的文件.该组件调用的的是操作 ...
- Linux远程连接及常用指令
一.远程连接 一般,服务器都是特别庞大的,会把它们用一个独立的小屋进行存放,如果有时候需要对服务器进行一些操作,离得近还好,离的远就会破费一些周折了,所以,这个时候我们就需要用到远程连接软件了.推荐使 ...
- Android学习总结(四)—— Activity和 Service进行通信
一.Activity 和 Service进行通信的基本概念 前面我们学习我生命周期里面包含了启动和停止服务的方法,虽然服务器在活动里启动,但在启动了服务之后,活动与服务基本就没有什么关系了.我们在活动 ...