我从服务器收到一个复杂的JSON。让它成为下一个:
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属性。 children是我的实体列表。我使用mapping来填充我的ViewModel。
首先,我无法想象如何在我的实体中设置为键id
。我想知道如何“潜水”它。而且,我需要扩展我的实体。添加计算属性,如下一个示例:
computProp: ko.computed(function() {return name+status;})
我不想创建js类,因为在这种情况下我没有看到映射的好处。在这种情况下,我可以实现手动映射。对我来说会更清楚。
所以任何想法,建议或评论都是受欢迎的。
PS:我搜索/阅读过类似的topics
答案 0 :(得分:1)
您必须明确声明子视图模型才能获得此行为,但您仍然可以从完成所有映射中获益
ChildViewModel = function(data) {
ko.mapping.fromJS(data, {}, this);
this.computProp = ko.computed(function() {
return this.name() + this.status();
}, this);
};