使用Knockout映射插件消耗非规范化数据

Consuming non-normalized data with the Knockout Mapping Plug-In

本文关键字:非规范 规范化 数据 Knockout 映射 插件 使用      更新时间:2023-09-26

我有一个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

对于像这样的非规范化JSON数据,使用映射插件的最佳策略是什么?问题是插件似乎使用CollectionItem[0]作为模板,但当我预览结果时,当我试图读取根时,Knockout会爆炸。CollectionItem[1].beta(不存在)。

编辑#1:我想淘汰赛并没有我想象的那么受欢迎。。。这个问题似乎注定要获得汤博乐奖-(

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

我在Knockout JS论坛上得到了一个名为NTB的人的回答。以下是他对JS fiddle的解决方案,以防有人感兴趣。我不想回答我自己的问题,但事实就是这样。

http://jsfiddle.net/PxeyY/

以下是他的总结:

"我有有时在调用映射程序之前手动"按摩"数据,或者创建了一个伪shell对象,该对象的所有可能属性都设置为null(在数组的情况下为[])--然后使用$.extend(dummy,real)创建一些东西。fromJS()可以使用。你必须反复具有该模式的数组,但无论如何,这是我的0.02美元。

"不过我也想听听更清洁的解决方案。"