Json (关于使用敲除插件)如何将子对象数组作为ObservalArray绑定到父ObservalArray

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",

我对敲除插件很陌生,我正在尝试用这个插件构建一个评论线程。当子注释绑定到父注释时,我遇到了一些问题,预期的json字符串化对象应该如下所示

[
    {
    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)
    };
此处示例: