計算監控屬性構造參考
計算監控屬性可使用以下形式進行構造:
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 ... });
上述介紹的這些構造方法和函數通常只在高級場景非常有用。