Javascript 敲除:将映射扩展到复杂JSON
我从服务器接收到一个复杂的JSON。让它成为下一个:Javascript 敲除:将映射扩展到复杂JSON,javascript,knockout.js,knockout-mapping-plugin,Javascript,Knockout.js,Knockout Mapping Plugin,我从服务器接收到一个复杂的JSON。让它成为下一个: var data = [{ name: "name1", items:[ { name:"name11", subItems:[{ name:"name111", children[ {id:1,name:"child1111",status:"good"},
var data = [{
name: "name1",
items:[
{
name:"name11",
subItems:[{
name:"name111",
children[
{id:1,name:"child1111",status:"good"},
{id:2,name:"child1112",status:"bad"},
{id:3,name:"child1113",status:"good"}
]},
{
name:"name112",
children[
{id:4,name:"child1121",status:"good"}]
}]
},
{
name:"name12",
subItems:[{
name:"name121",
children[
{id:5,name:"child1211",status:"bad"}]
}]
}]
},
{
name: "name2",
items:[
{
name:"name21",
subItems:[{
name:"name111",
children[
{id:7,name:"child2111",status:"good"}
]}]
}]
}];
所以我有一个对象列表,每个对象都包含名称和属性项。Items是类似对象列表的属性,每个对象都包含name和subItems属性。subItems属性与previous相同,并具有name和children属性。子对象是我的实体列表。我用于填充我的ViewModel。
首先,我无法想象如何在实体中设置为keyid
。我想知道如何“潜水”到它。此外,我需要扩展我的实体。添加compute属性,如下例所示:
computProp: ko.computed(function() {return name+status;})
我不想创建js类,因为我看不到这种情况下映射的好处。在这种情况下,我可以实现手动映射。这对我来说会更清楚
因此,欢迎任何想法、建议或批评
PS:我已经搜索/阅读了类似的您必须显式声明children viewmodel才能获得此行为,但您仍然可以从完成所有映射中获益
您必须显式声明childrenviewmodel才能获得此行为,但您仍然可以从完成所有映射中获益
因此,当我得到正确的答案时,我需要通过循环抛出第一级和第二级,并映射
子级
?好的,但是在这种情况下我如何更新它们?再去扔圈?没有看到任何优点和缺点-代码看起来很复杂,然后手动更新。您只需要映射子数组,其余由框架完成。所以不,它并不比手册更复杂,我还是搞不懂。JSFIDLE中的结果在这两个示例中都是空的。奇怪的是,只在FF中测试,但在其他浏览器中应该不会有问题,请检查错误控制台。由于映射插件只能创建叶,所以它稍微复杂一点。你需要像这样分别映射每个级别,以便我得到正确的结果-我需要通过循环抛出第一级和第二级,并映射子级
?好的,但是在这种情况下我如何更新它们?再去扔圈?没有看到任何优点和缺点-代码看起来很复杂,然后手动更新。您只需要映射子数组,其余由框架完成。所以不,它并不比手册更复杂,我还是搞不懂。JSFIDLE中的结果在这两个示例中都是空的。奇怪的是,只在FF中测试,但在其他浏览器中应该不会有问题,请检查错误控制台。由于映射插件只能创建叶,所以它稍微复杂一点。你需要将每个关卡分别映射为
ChildViewModel = function(data) {
ko.mapping.fromJS(data, {}, this);
this.computProp = ko.computed(function() {
return this.name() + this.status();
}, this);
};