只要你沒有在你的ViewModels或自定義的粘合劑的任何異步邏輯,那麼你可以把一行代碼applyBindings
後直接:
ko.applyBindings(myViewModel);
doSomethingElse();
這裏是一個長期提琴(確保打開控制檯查看輸出):http://jsfiddle.net/tlarson/bPaCb/
但是,如果您確實有異步邏輯(例如使用ajax調用Web服務),那麼您需要使用回調在完成所有事情後運行代碼。以下是我通常做的是:
- 設置我的視圖模型用布爾觀察到的指示數據尚未加載:
self.isLoaded = ko.observable(false);
- 添加一個「等待」指示燈(微調等)是可見當觀察到的是假的:
<div data-bind=visible:!isLoaded()"><img src="spinner.gif"></img></div>
- 同樣,隱藏的意見,直到
isLoaded
是真實的:<div data-bind="visible:isLoaded">Data views go here</div>
- 呼叫
applyBindings(myViewModel);
把所有設置的綁定。這應該不包括任何Ajax調用 - 數據應該是空的。
- 發出Ajax調用來加載數據。當數據返回時,更新視圖模型上的相應數據屬性,集合
isLoaded
爲true。這會隱藏微調器並顯示數據。
20-30秒?聽起來你的KO代碼有嚴重的性能問題。 – Anders 2013-05-09 16:54:11