KnockoutJS 3.X API 第三章 計算監(jiān)控屬性(3) KO如何實現(xiàn)依賴追蹤
KO是如何實現(xiàn)自動更新的
初學(xué)者可以掠過該篇,如果你是一個刨根問底的開發(fā)者,那本節(jié)將告訴你KO是如何實現(xiàn)依賴追蹤和UI自動更新的。
其實很簡單,KO的依賴追蹤算法如下:
- 當(dāng)你聲明一個計算監(jiān)控屬性,KO立即調(diào)用其相關(guān)的函數(shù)來獲取其初始值。
- 當(dāng)相關(guān)函數(shù)正在運行,KO將建立一個訂閱到相關(guān)監(jiān)控屬性(包括其他計算監(jiān)控屬性)并讀取他們的值。訂閱回調(diào)函數(shù)設(shè)置為訂閱函數(shù)再次運行,循環(huán)的這個過程。
- 當(dāng)有新的值,KO會通知你的計算監(jiān)控屬性將值反饋給用戶。
采用PEEK控制依賴
Knockout的自動依賴跟蹤通常不是你想要的,但是你有時可能需要控制那些會更新依賴屬性值的監(jiān)控屬性,特別是依賴屬性會執(zhí)行某些操作時,比如一個Ajax請求。peek方法可以幫助你在不需要創(chuàng)建依賴的情況下去控制一個監(jiān)控屬性或者依賴屬性。
在下面的例子中,依賴屬性通過Ajax方法和其他兩個監(jiān)控屬性參數(shù)來重新加載一個名為currentPageData的監(jiān)控屬性。當(dāng)pageIndex發(fā)生變化時,依賴屬性會被更新,但會忽略掉selectedItem的變化,因為它是通過peek方法控制。在這種情況下,用戶可能希望僅僅在數(shù)據(jù)被加載時才使用selectedItem的當(dāng)前值用于追蹤。
ko.computed(function() { var params = { page: this.pageIndex(), selected: this.selectedItem.peek() }; $.getJSON('/Some/Json/Service', params, this.currentPageData); }, this);
如上面的例子,如果你想做SPA的話,這種方式很有用哦~。如果你想阻止一些過于頻繁的監(jiān)控屬性更新,可以參考第二章第一節(jié)的延緩或抑制更改通知
作者:smallprogram
感謝您的閱讀。喜歡的、有用的就請大哥大嫂們高抬貴手"推薦一下"吧!你的精神支持是博主強大的寫作動力。歡迎轉(zhuǎn)載!另外,文章在表述和代碼方面如有不妥之處,歡迎批評指正。留下你的腳印,歡迎評論!

浙公網(wǎng)安備 33010602011771號