Knockout v3.4.0 中文版教程-9-计算监控-API参考
5.參考
下面的內(nèi)容描述了如何構(gòu)建和使用計(jì)算監(jiān)控。
1. 構(gòu)建一個(gè)計(jì)算監(jiān)控
可以用如下的形式構(gòu)建一個(gè)計(jì)算監(jiān)控:
- evaluator — 一個(gè)用來計(jì)算當(dāng)前計(jì)算監(jiān)控值的函數(shù)
- targetObject — 如果提供該值,該值定義了當(dāng)KO請(qǐng)求你的回調(diào)函數(shù)時(shí)函數(shù)內(nèi)部this的值。請(qǐng)看管理this章節(jié)查看更多信息。
- options — 一個(gè)包含計(jì)算監(jiān)控特性屬性設(shè)置的對(duì)象,下面有詳細(xì)列表。
- read - 必要屬性。一個(gè)用于計(jì)算當(dāng)前計(jì)算監(jiān)控當(dāng)前值的函數(shù)。
- write — 可選。如果有,計(jì)算監(jiān)控變?yōu)榭蓪?。這是一個(gè)函數(shù),接收其他代碼想要寫入計(jì)算監(jiān)控的值。具體功能由你的自定義邏輯對(duì)傳入值的處理,一般是把值傳回底層依賴。
- owner — 可選。如果有,定義當(dāng)KO請(qǐng)求你的read或write函數(shù)時(shí)函數(shù)內(nèi)部this的值。
- pure — 可選。如果選項(xiàng)為true,計(jì)算監(jiān)控會(huì)變?yōu)榧冇?jì)算監(jiān)控。該項(xiàng)可由ko.pureComputed來構(gòu)造計(jì)算監(jiān)控來替代。
- deferEvaluation —可選。如果該項(xiàng)為true,計(jì)算監(jiān)控的值不會(huì)進(jìn)行求值,直到確實(shí)有某些代碼訪問它的值或手動(dòng)訂閱它。默認(rèn)情況下,計(jì)算監(jiān)控在構(gòu)建之后立即進(jìn)行求值。
- disposeWhen — 可選。如果選項(xiàng)為true,該函數(shù)在每次重新求值之前執(zhí)行,用于決定計(jì)算監(jiān)控是否應(yīng)該被釋放。結(jié)果為true會(huì)觸發(fā)釋放所有計(jì)算監(jiān)控。
- disposeWhenNodeIsRemoved — 可選。如果有,計(jì)算監(jiān)控的釋放會(huì)在規(guī)定的DOM節(jié)點(diǎn)被KO移除的時(shí)候觸發(fā)。此功能是用來處理計(jì)算監(jiān)控綁定節(jié)點(diǎn),節(jié)點(diǎn)通過模板和控制流綁定刪除時(shí)釋放計(jì)算監(jiān)控。
2. 使用計(jì)算監(jiān)控
一個(gè)計(jì)算監(jiān)控提供如下一些方法:
- dispose() —手動(dòng)釋放計(jì)算監(jiān)控,清除所有依賴的訂閱。如果你想停止正在刷新數(shù)據(jù)的計(jì)算監(jiān)控或者清理由于存在依賴的監(jiān)控而不能清理的計(jì)算監(jiān)控的內(nèi)存。
- extend(extenders) —給計(jì)算監(jiān)控提供擴(kuò)展器。
- getDependenciesCount() — 返回當(dāng)前計(jì)算監(jiān)控的依賴數(shù)量。
- getSubscriptionsCount( [event] ) — 返回計(jì)算監(jiān)控當(dāng)前訂閱的數(shù)量(無論是來自計(jì)算監(jiān)控還是手動(dòng)訂閱)??蛇x的,傳入一個(gè)事件名(比如change)會(huì)返回當(dāng)前事件的訂閱數(shù)量。
- isActive() — 返回計(jì)算監(jiān)控的值在之后是否可能會(huì)被更新。如果計(jì)算監(jiān)控沒有依賴,會(huì)處于閑置狀態(tài)。
- peek() —返回計(jì)算監(jiān)控當(dāng)前值并不創(chuàng)建依賴。
- subscribe( callback [,callbackTarget, event] ) — 注冊(cè)一個(gè)手動(dòng)訂閱來接收計(jì)算監(jiān)控改變的通知。
3. 確定監(jiān)控類型
要檢測(cè)一個(gè)屬性是監(jiān)控、計(jì)算監(jiān)控還是其他,可以使用如下方法:
- ko.isObservable — 如果是監(jiān)控對(duì)象,監(jiān)控?cái)?shù)組和計(jì)算監(jiān)控,返回true。
- ko.isWritableObservable —如果是監(jiān)控對(duì)象,監(jiān)控?cái)?shù)組和可寫計(jì)算監(jiān)控,返回true(也可寫作ko.isWriteableObservable)。
- ko.isComputed — 如果是計(jì)算監(jiān)控,返回true。
- ko.isPureComputed — 如果是純計(jì)算監(jiān)控,返回true。
4. 使用計(jì)算監(jiān)控上下文
在執(zhí)行計(jì)算監(jiān)控求值函數(shù)期間,你能訪問ko.computedContext來獲取當(dāng)前計(jì)算監(jiān)控屬性的信息。它提供了如下方法:
- isInitial() —如果計(jì)算監(jiān)控是第一次調(diào)用求值函數(shù),該函數(shù)返回true,否則返回false。對(duì)于純計(jì)算監(jiān)控,該方法一直是undefined。
getDependenciesCount() — 返回在當(dāng)前求值過程中計(jì)算監(jiān)控被檢測(cè)到的依賴數(shù)量。
*注意: ko.computedContext.getDependenciesCount()等同于調(diào)用計(jì)算監(jiān)控本身調(diào)用getDependenciesCount()。該方法也存在的原因是讓ko.computedContext提供一種方式在計(jì)算監(jiān)控構(gòu)建完成之前,即第一次求值之前可以統(tǒng)計(jì)依賴數(shù)量。
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 ... });
例子:
這些函數(shù)通常只會(huì)在某些復(fù)雜場景特別有用,比如當(dāng)計(jì)算監(jiān)控的主要目的是觸發(fā)它的求值函數(shù)的一些副作用,你只想在第一次運(yùn)行的時(shí)候執(zhí)行一些配置邏輯,或者僅僅在它至少有一個(gè)依賴的情況下執(zhí)行(因此可能在之后會(huì)被重新調(diào)用)。大多數(shù)計(jì)算監(jiān)控屬性不需要關(guān)心之前它們是否執(zhí)行過,或者它們有多少依賴。
轉(zhuǎn)載于:https://www.cnblogs.com/DHclly/p/6291324.html
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的Knockout v3.4.0 中文版教程-9-计算监控-API参考的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python 根据地址获取经纬度及求距离
- 下一篇: Linux环境上的图形化界面SVN客户端