Knockout v3.4.0 中文版教程-9-计算监控-API参考
生活随笔
收集整理的這篇文章主要介紹了
Knockout v3.4.0 中文版教程-9-计算监控-API参考
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
5.參考
下面的內容描述了如何構建和使用計算監控。
1. 構建一個計算監控
可以用如下的形式構建一個計算監控:
- evaluator — 一個用來計算當前計算監控值的函數
- targetObject — 如果提供該值,該值定義了當KO請求你的回調函數時函數內部this的值。請看管理this章節查看更多信息。
- options — 一個包含計算監控特性屬性設置的對象,下面有詳細列表。
- read - 必要屬性。一個用于計算當前計算監控當前值的函數。
- write — 可選。如果有,計算監控變為可寫。這是一個函數,接收其他代碼想要寫入計算監控的值。具體功能由你的自定義邏輯對傳入值的處理,一般是把值傳回底層依賴。
- owner — 可選。如果有,定義當KO請求你的read或write函數時函數內部this的值。
- pure — 可選。如果選項為true,計算監控會變為純計算監控。該項可由ko.pureComputed來構造計算監控來替代。
- deferEvaluation —可選。如果該項為true,計算監控的值不會進行求值,直到確實有某些代碼訪問它的值或手動訂閱它。默認情況下,計算監控在構建之后立即進行求值。
- disposeWhen — 可選。如果選項為true,該函數在每次重新求值之前執行,用于決定計算監控是否應該被釋放。結果為true會觸發釋放所有計算監控。
- disposeWhenNodeIsRemoved — 可選。如果有,計算監控的釋放會在規定的DOM節點被KO移除的時候觸發。此功能是用來處理計算監控綁定節點,節點通過模板和控制流綁定刪除時釋放計算監控。
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.computedContextvar 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 ... });
例子:
這些函數通常只會在某些復雜場景特別有用,比如當計算監控的主要目的是觸發它的求值函數的一些副作用,你只想在第一次運行的時候執行一些配置邏輯,或者僅僅在它至少有一個依賴的情況下執行(因此可能在之后會被重新調用)。大多數計算監控屬性不需要關心之前它們是否執行過,或者它們有多少依賴。
轉載于:https://www.cnblogs.com/DHclly/p/6291324.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的Knockout v3.4.0 中文版教程-9-计算监控-API参考的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python 根据地址获取经纬度及求距离
- 下一篇: Linux环境上的图形化界面SVN客户端