使用Knockout Mapping Plug-In消耗非规范化数据

时间:2012-03-16 22:05:01

标签: javascript json mapping knockout.js denormalized

我有一个REST服务,它返回一个包含非的集合 标准化数据。例如,它可能看起来像这样:

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]作为模板,但是当我通过结果时,当我尝试读取root.CollectionItem [1] .beta(不存在)时,Knockout正在爆炸。

编辑#1 :我猜Knockout并不像我想的那么受欢迎......这个问题似乎注定了Tumbleweed奖。 : - (

编辑#2 :在Knockout论坛http://groups.google.com/group/knockoutjs/browse_thread/thread/6705c222481c7b75#上得到了可行的答案,所以我不必担心另一个Tumbleweed奖! : - )

1 个答案:

答案 0 :(得分:3)

我在Knockout JS论坛上得到了一个名为 NTB 的人的回答。这是他对JS小提琴的解决方案,以防任何人感兴趣。讨厌回答我自己的问题,但事实就是如此。

http://jsfiddle.net/PxeyY/

以下是他的总结:

“我有 有时在调用映射器之前手动“按摩”数据,或者 创建了一个虚拟shell对象,其中包含所有可能的属性 null(或者在数组的情况下为[]) - 然后使用$ .extend(dummy,real)来 创建一些.fromJS()可以使用。你必须迭代 具有该模式的数组,但无论如何都是我的$ .02。

“我也想听听更清洁的解决方案。”