2012-07-25 57 views
0

我在我的客戶端表單操作API的引擎蓋下使用了knockout.js。它旨在操縱由製表符,字段集(包含在選項卡中)和單個表單控件(包含在字段集中)構建的「分層」表單。Knockout.js:如何綁定層次表單?

我的策略是爲每個組件創建一個單獨的視圖模型。我的問題是:如何最好地將模型狀態向下傳播到層次結構中? (例如,當一個標籤編程殘疾人,我也想還都含有被禁用字段集及其表單控件)

我已經準備了的jsfiddle勾畫我的第一種方法:

http://jsfiddle.net/fbuchinger/bxNKg/4/

在目前一切都很好,但我注意到,該組的'可編輯'狀態不向下傳播到窗體控件的模型(PRENAME.editable屬性仍然是true,雖然它應該是false)。有更好的方法嗎?

回答

2

這裏是可以工作了幾個方法:

  1. 傳遞一組應當規範該組構造的控制。然後,設置對可編輯的observable組的訂閱以將其傳播給子代。下面是一個示例:http://jsfiddle.net/rniemeyer/ryKpS/

  2. 將組傳遞給每個控件的構造函數,並訂閱該組的可編輯觀察值並更新此孩子的可編輯觀察值(我更喜歡#1,因爲當孩子不需要明確瞭解他們的父母)。示例:http://jsfiddle.net/rniemeyer/qRCq4/

  3. 使用pub/sub同步這些值。我在這裏有一個擴展庫:https://github.com/rniemeyer/knockout-postbox。您的組可以在其可編輯屬性更改時發佈消息,然後讓子組訂閱該主題。這樣父母和孩子就不需要直接引用對方。你可能需要考慮這個話題,看看是否需要加入一個組ID或其他東西來使它獨一無二。這裏的示例:http://jsfiddle.net/rniemeyer/HC2jx/

+0

非常感謝這個徹底和真正有價值的答案!最後,我使用瞭解決方案3(PubSub),因爲視圖模型之間沒有相互依賴關係。淘汰賽 - 郵箱是一個非常有用的插件! – fbuchinger 2012-07-25 15:52:23