KO是如何實現自動更新的
初學者可以掠過該篇,如果你是一個刨根問底的開發者,那本節將告訴你KO是如何實現依賴追蹤和UI自動更新的。
其實很簡單,KO的依賴追蹤算法如下:
- 當你聲明一個計算監控屬性,KO立即調用其相關的函數來獲取其初始值。
- 當相關函數正在運行,KO將建立一個訂閱到相關監控屬性(包括其他計算監控屬性)並讀取他們的值。訂閱回調函數設置為訂閱函數再次運行,循環的這個過程。
- 當有新的值,KO會通知你的計算監控屬性將值反饋給用戶。
采用PEEK控制依賴
Knockout的自動依賴跟蹤通常不是你想要的,但是你有時可能需要控制那些會更新依賴屬性值的監控屬性,特別是依賴屬性會執行某些操作時,比如一個Ajax請求。peek方法可以幫助你在不需要創建依賴的情況下去控制一個監控屬性或者依賴屬性。
在下面的例子中,依賴屬性通過Ajax方法和其他兩個監控屬性參數來重新加載一個名為currentPageData的監控屬性。當pageIndex發生變化時,依賴屬性會被更新,但會忽略掉selectedItem的變化,因為它是通過peek方法控制。在這種情況下,用戶可能希望僅僅在數據被加載時才使用selectedItem的當前值用於追蹤。
ko.computed(function() { var params = { page: this.pageIndex(), selected: this.selectedItem.peek() }; $.getJSON('/Some/Json/Service', params, this.currentPageData); }, this);
如上面的例子,如果你想做SPA的話,這種方式很有用哦~。如果你想阻止一些過於頻繁的監控屬性更新,可以參考第二章第一節的延緩或抑制更改通知
