Json (关于使用敲除插件)如何将子对象数组作为ObservalArray绑定到父ObservalArray
我对敲除插件很陌生,我正在尝试用这个插件构建一个评论线程。当子注释绑定到父注释时,我遇到了一些问题,预期的json字符串化对象应该如下所示Json (关于使用敲除插件)如何将子对象数组作为ObservalArray绑定到父ObservalArray,json,model-view-controller,mvvm,knockout.js,Json,Model View Controller,Mvvm,Knockout.js,我对敲除插件很陌生,我正在尝试用这个插件构建一个评论线程。当子注释绑定到父注释时,我遇到了一些问题,预期的json字符串化对象应该如下所示 [ { CreatedBy: "user 1", CreatedOn: Date(), Description: "comment 1", ChildFeeds: [ { CreatedBy: "user 2",
[
{
CreatedBy: "user 1",
CreatedOn: Date(),
Description: "comment 1",
ChildFeeds: [
{
CreatedBy: "user 2",
CreatedOn: Date(),
Description: "comment 1-1"
},
{
CreatedBy: "user 3",
CreatedOn: Date(),
Description: "comment 1-2"
},
{
CreatedBy: "user 4",
CreatedOn: Date(),
Description: "comment 1-3"
}
]
},
{
CreatedBy: "user 5",
CreatedOn: Date(),
Description: "comment 2",
ChildFeeds: [
{
CreatedBy: "user 6",
CreatedOn: Date(),
Description: "comment 2-1"
},
{
CreatedBy: "user 7",
CreatedOn: Date(),
Description: "comment 2-2"
}
]
},
]
但是当我运行代码时,会得到下面的数据,而不是上面的结构
[
{
"CreatedBy": "user 1",
"CreatedOn": "Mon Jan 02 2012 15:50:51 GMT+0200 (Turkey Standard Time)",
"Description": "comment 1",
"ChildFeeds": [
{
"ChildFeeds": [
{
"CreatedBy": "user 2",
"CreatedOn": "Mon Jan 02 2012 15:50:51 GMT+0200 (Turkey Standard Time)",
"Description": "comment 1-1"
},
{
"CreatedBy": "user 3",
"CreatedOn": "Mon Jan 02 2012 15:50:51 GMT+0200 (Turkey Standard Time)",
"Description": "comment 1-2"
},
{
"CreatedBy": "user 4",
"CreatedOn": "Mon Jan 02 2012 15:50:51 GMT+0200 (Turkey Standard Time)",
"Description": "comment 1-3"
}
]
}
]
},
{
"CreatedBy": "user 5",
"CreatedOn": "Mon Jan 02 2012 15:50:51 GMT+0200 (Turkey Standard Time)",
"Description": "comment 2",
"ChildFeeds": [
{
"ChildFeeds": [
{
"CreatedBy": "user 6",
"CreatedOn": "Mon Jan 02 2012 15:50:51 GMT+0200 (Turkey Standard Time)",
"Description": "comment 2-1"
},
{
"CreatedBy": "user 7",
"CreatedOn": "Mon Jan 02 2012 15:50:51 GMT+0200 (Turkey Standard Time)",
"Description": "comment 2-2"
}
]
}
]
}
]
在这里,您会注意到,由于编码错误,很不幸,我为每个父对象复制了两次ChildFeeds对象数组。。你可以从这里找到代码
实现这一问题的最佳途径是什么
谢谢现在您的
ChildFeedModel
是一个包含ChildFeeds
observearray的对象,因此当您将其分配给wallfeedsmodel
上的ChildFeeds
属性时,您将得到双ChildFeeds
一个选择是让您的儿童反馈模型
成为一个可观察的方式。因此,您将创建一个ObservalArray,使用任何其他方法/属性扩展它,然后返回它
比如:
var childFeedModel = function(ChildFeeds) {
var result = ko.observableArray();
result.addChildFeed = function(tempChildFeed) {
result.push({
CreatedBy: tempChildFeed.CreatedBy,
CreatedOn: tempChildFeed.CreatedOn,
Description: tempChildFeed.Description
});
};
ko.utils.arrayForEach(ChildFeeds, function(feed) {
result.addChildFeed(feed);
});
return result;
};
我将它改为以小写字母开头,因为现在创建一个语句时不需要new
语句(它总是返回一个新的observableArray)
现在,在您的wallfeedsmodel
中,您只需按如下方式分配它:
return {
CreatedBy: singlefeed.CreatedBy,
CreatedOn: singlefeed.CreatedOn,
Description: singlefeed.Description,
ChildFeeds: childFeedModel(singlefeed.ChildFeeds)
};
此处示例: