计算监控属性构造参考
计算监控属性可使用以下形式进行构造:
ko.computed( evaluator [, targetObject, options] )
- 这种形式是创建一个计算监控属性最常见的情况。evaluator
- 用于返回计算值的函数。targetObject
-如果给出定义的值this
时KO调用回调函数。参见部分第三章 计算监控属性(1) 使用计算监控属性以获取更多信息。options
- 计算监控属性的其他属性的对象。请参见下面的完整列表。ko.computed( options )
- 该单个参数形式用于创建一个计算观察到接受下列任何性质的JavaScript对象。read
- 必写。用来评估计算监控属性的当前值的函数。write
- 可选的。如果给出,使得计算监控属性到可写。这是接收其他值并赋值给计算监控属性的函数。这是给你提供自定义逻辑的地方。owner
- 可选的。如果给出定义的值this
时KO调用您read
或write
回调对象。pure
- 可选的。如果此选项true
,计算观察到的将被设置为一个Pure computed observables。此选项可替代为ko.pureComputed
构造。deferEvaluation
- 可选的。如果这个选项true
,那么计算监控属性的值将不会被计算。disposeWhen
- 可选的。传入方法。如果给出,该传入方法将会在每一次运算结束之后被调用来释放依赖属性。真正的结果就是触发依赖属性的disposal方法。disposeWhenNodeIsRemoved
- 可选的。,传入方法。如果给出,当指定的DOM元素被KO删除的时候依赖属性的disposal方法会被触发。当元素的绑定被模版或者控制流程绑定方法移除的时候,此功能是用来释放依赖属性。
ko.pureComputed( evaluator [, targetObject] )
-构造一个Pure computed observables,使用this来调用evaluator或者optional,他不像ko.computed,这种构造方式不包含options参数。ko.pureComputed( options )
-构造一个Pure computed observables的另一种方式,她只包含options参数
。具体参数内容可以参考上面的computed(options)。
计算监控属性的函数:
一个计算监控属性提供以下函数:
dispose()
- 清除所有订阅依赖关系。extend(extenders)
-应用给定的扩展应用到计算监控属性。getDependenciesCount()
- 返回计算监控属性的依赖性的当前数目。getSubscriptionsCount( [event] )
-返回用户的订阅数量。或者,通过事件的名称(如"change"
)返回刚刚订阅的计数。isActive()
- 返回依赖属性在以后是否会被更新,一个依赖属性如果没有依赖关系是无效的。peek()
- 返回当前依赖属性的值而无需创建依赖关系(可以参考第三章 计算监控属性(3) KO如何实现依赖追踪中的peek)。subscribe( callback [,callbackTarget, event] )
-注册一个手动订阅来通知依赖属性的变化。
确定监控属性的类型
ko.isObservable
-当是observables、observableArrays或者 computed observables时返回true。ko.isWritableObservable
-当是observables、observableArrays或者可写的 computed observables时返回true。ko.isComputed
-当是计算监控属性时返回true。ko.isPureComputed
-当是Pure computed observables时,返回ture.
使用计算监控属性的context
一个计算监控属性函数的执行过程中,您可以访问ko.computedContext
获取有关当前计算监控属性信息。它提供了以下功能:
isInitial()
-当计算监控属性首次运行时,返回true,其他时候返回false。对于Pure computed observables,isInitial()
始终undefined
。getDependenciesCount()
- 返回计算监控属性的依赖性的当前数目。- 注:
ko.computedContext.getDependenciesCount()
等同于调用计算监控属性的getDependenciesCount()
。
- 注:
例:
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 ... });
上述介绍的这些构造方法和函数通常只在高级场景非常有用。
时间: 2024-12-26 07:45:12