2012-03-16 17 views
3

我有一個REST服務,它返回一個包含非標準數據的非標準化數據的集合。例如,它可能看起來像這樣:使用Knockout Mapping插件消耗非標準化數據

root 
. 
root:CollectionItem[0].alpha 
root:CollectionItem[0].beta 
root:CollectionItem[0].zappa 
. 
root:CollectionItem[1].alpha 
root:CollectionItem[1].children[0].MoonUnit 
root:CollectionItem[1].children[1].Dweezil 
root:CollectionItem[1].zappa 
. 
root:CollectionItem[2].alpha 
root:CollectionItem[2].beta 
root:CollectionItem[2].zappa 

使用Mapping PlugIn與非標準化的JSON數據這樣的最佳策略是什麼?問題是PlugIn似乎使用CollectionItem [0]作爲模板,但是當我通過結果進行foreach時,Knockout在我嘗試讀取root.CollectionItem [1] .beta(不存在)時爆炸了。

編輯#1:我猜Knockout並不像我想象的那麼受歡迎......這個問題似乎註定要成爲Tumbleweed獎。 :-(

編輯#2:上了淘汰賽論壇http://groups.google.com/group/knockoutjs/browse_thread/thread/6705c222481c7b75#一個可行的答案,所以我不擔心另一Tumbleweed公司獎:-)

+1

正確的標記有助於避免風滾草。 :) – Charles 2012-03-20 04:39:36

+0

感謝您修復我懷俄明州啓發的標籤。 (我出生在懷俄明州,那裏有很多風滾草!) – 2012-03-20 17:50:28

回答

3

我從別人的答案命名關於Knockout JS論壇的NTB。如果有人感興趣,這裏是他在JS小提琴上的解決方案。討厭回答我自己的問題,但它就是這樣。

http://jsfiddle.net/PxeyY/

這裏是他的總結:

「我有 有時手動‘按摩’數據調用映射器之前,或 創造出了全部設置爲 空的可能特性的虛擬殼對象(或[]在數組的情況下) - 然後使用$ .extend(dummy,real)到 創建一些.fromJS()可以使用。您必須遍歷 數組與該模式,但這是無論如何,我的$ 0.02。

」雖然我自己也希望聽到更清潔的解決方案。「

+1

NTB提出的解決方案(請參閱jsfiddle鏈接)實際上非常適用於非規格化數據。當我想發送反序列化模型並將其發送回RESTful API時,我只需遞歸遍歷模型,並用空值「刪除」所有空數組和節點。 – 2012-03-20 17:52:24