2012-03-16 51 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