2011-09-15 48 views
10

我正在使用Knockout js。我有一個包含對象數組的視圖模型,我想讓用戶使用嚮導樣式界面編輯其中一個對象。 我遇到的問題是嚮導會根據做出的選擇顯示不同的步驟。例如:如何將Knockout js模型綁定到嚮導樣式UI

  • 如果用戶選擇「是」的步驟1則我顯示步驟2a
  • 如果用戶選擇「否」上然後我顯示步驟2b步驟1(即,不同的對話形式。)

這會繼續,以便通過嚮導的路徑不是線性的。

我的問題是做我綁定所有在視圖模型可能嚮導用戶界面的步驟啓動即使永遠不會顯示的一些步驟和某些屏幕的綁定將是無效的(例如,第5步可以結合viewModel.theObject.PropertyA.PropertyB.PropertyC(),但PropertyB在步驟1仍爲空)。

更好的方式可能是綁定到UI步驟,因爲它們顯示,但我的問題是在那裏我沒有意識到一旦步驟完成後「解除綁定」模型的好方法,所以我最終可能綁定到來自原始列表的多個對象的步驟!

回答

13

我認爲這樣做的好方法是讓您的視圖模型成爲一組步驟並將您的UI綁定到「selectedStep」。然後,每個步驟都可以動態選擇要使用的模板(如在此post中)。

這裏是思想的一個粗略的樣本:http://jsfiddle.net/rniemeyer/SSY6n/

這樣的模板綁定處理生成/裝訂/清理基於動態選擇任何步驟上的內容。如果這些步驟位於observableArray中,那麼您甚至可以動態添加步驟。也許你有一個所有可能的步驟的列表,然後有一個「activeSteps」數組,代表基於用戶的選擇當前有效的步驟。

+3

這裏略有更新:http://jsfiddle.net/rniemeyer/FyuSD/ –

+0

謝謝,瑞安。一個非常有趣和創造性的方法。因爲我現在對我的開發非常熟悉,所以我可以嘗試通過使用「data-bind ='if:xxx」語句來防範未初始化的屬性,而這些語句目前似乎正在工作。如果你的解決方案更優雅,但是! PS - 您的博客的偉大粉絲(www.knockmeout.net)。保持精彩的工作! –

+0

@RPNiemeyer我使用的是ASP.net MVC 4,並且有一個'[Serializable]'嚮導,它使用單獨的頁面(來自MVC書籍),並且還使用'[DataAnnotations]'進行客戶端驗證。我想知道你的更新樣本是否會替換頁面,但是繼續使用驗證。有什麼想法嗎? – REMESQ