2012-04-17 81 views
3

我對knockoutjs非常非常陌生 - 已經完成了教程 ,我做了一個不錯的開始。我有應用程序似乎很適合 到KO。在那我需要用來自JSON的數據填充表格。這 數據是嵌套的,並且可以嵌套在任何深度,但我的API只有 永遠返回兩層深的數據。KnockoutJS - 嵌套數據,加載子女

E.g.

  • 節點1
    • 節點A
    • 節點B

我已經成功地獲取數據加載到我的表,可愛。我已經採取了 這一步,並支持嵌套。我有一個要求,所以如果一個節點有孩子,它可以被注入節點下面的表中。

這方面的一個例子是...

  • 節點1(HasChildren)
    • 節點A
    • 節點B(HasChildren)

作爲節點B'HasChildren',我想允許將它的子節點加載到節點B下的表中。在這種情況下,我將能夠查詢我的API,它會返回孩子節點B

  • 節點1
    • 節點A
    • 節點B
      • 節點B1
      • 點B2

我已經得到的東西大致的工作,但它僅適用於1級 節點。一旦它達到level2,似乎無法找到我的方法 (addChild)。我無法弄清楚爲什麼它找不到該方法,因爲它在我的ViewModel中是 。

下面的帖子,去解決這部分問題很長的路要走。

幫助!

我貼在這裏的代碼...(如果您滾動到桌子上的權利, 您可以點擊打開,看到的,發生了什麼事!)

http://jsfiddle.net/8k6pj/1/ - 原始版本(2012年4月18日)

http://jsfiddle.net/8k6pj/6/ - 最新版本

提前非常感謝!

勞倫斯

P.S有進一步的更新我的代碼,所以雖然我有點粘在上面,已經開始尋找到實施代碼將如何回傳,所以我們可以節省。

它看起來像回發工作,但它不回發更改的值,原始值回發。認爲這是因爲我需要使用ObservableArray,現在就開始探索。

+0

只是覺得應該讓你知道我這給了一個好球。我現在的感覺是視圖綁定邏輯有點複雜。我在辯論重構它,看看我能否發現這個問題。你有沒有進展? – 2012-04-17 20:23:13

+0

已經更新了代碼/問題,所以希望它成爲位更有意義!(:劉喜 – uniquelau 2012-04-18 15:22:04

回答

2

我已經瞭解了您希望發生的事情,但我仍然有點不清楚,但認爲我會提交我所做的以便在需要時激發更多信息。

您的問題標題提到了嵌套,但是從您的代碼看來,您並不是嵌套任何東西,而是展開嵌套的父子對象。

而不是使用它我不會推薦,因爲它打破了你的模型封裝jQuery的代表,我改變了你的模板中使用單擊綁定並放置在乘員/ Component對象的開放功能。

<td rowspan="3"> 
    <a data-bind="click: open">Open</a> 
    <a>Save</a> 
</td> 

我也注意到你的addChild方法需要你傳遞一個數組給它。你原來的代碼不會工作,因爲船員對象本身沒有Crews集合,所以我猜測他們的父組件上使用了Crews集合。

所有這些改變意味着我必須通過根的ViewModels並在構造函數的父組件。

http://jsfiddle.net/madcapnmckay/fdb5r/2/

僅供參考 - 單擊打開時所分配的對象沒有得到正確初始化該小提琴還拋出錯誤。我已經讓你解決這個問題,因爲我不明白該域名足以自己修復它。添加行爲雖然正常工作。

編輯更新的問題後

這裏有一個重新分解,這應該讓你開始簡化的例子。我刪除了很多非必要的東西,使它更清晰地表明它的工作原理。

http://jsfiddle.net/madcapnmckay/xxGam/

希望這有助於。

+0

@Madcapnmckay - 感謝您的幫助,已經使更多的意義上您的權利,我有嵌套腳麻我」。 VE再次感謝您的及時更新上面的問題,試圖澄清事情有點感謝,劉 – uniquelau 2012-04-18 09:08:38

+0

@uniquelau! - 嘿感謝澄清我會嘗試推出一個簡單的例子一個問題是什麼船員之間的差異。從UI的角度組件?能將它們統一成一個對象? – madcapnmckay 2012-04-18 18:13:16

+0

完全沒有區別!這是同一個對象,我只是把它叫做不同的名字,因爲我不能讓它重複使用相同的對象。 – uniquelau 2012-04-18 20:11:59