Javascript 手动敲除未正确映射

Javascript 手动敲除未正确映射,javascript,jquery,knockout.js,Javascript,Jquery,Knockout.js,我试图将JSON片段读入knockout.js中的oberservable数组,但由于某些原因,contactGroup对象的属性从未设置过,有人能解释为什么会发生这种情况吗?谢谢 "contactGroups":[ {"id":1,"name":"Test Group","contact":[{"name":"aaaaaa"},{"name":"bbbbbb"}] }] self.contactGroups = ko.observableArray([]) $(data.conta

我试图将JSON片段读入knockout.js中的oberservable数组,但由于某些原因,contactGroup对象的属性从未设置过,有人能解释为什么会发生这种情况吗?谢谢

"contactGroups":[
    {"id":1,"name":"Test Group","contact":[{"name":"aaaaaa"},{"name":"bbbbbb"}]
}]

self.contactGroups = ko.observableArray([])

$(data.contactGroups).each(function(group){
    var temp = new ContactGroup({id: group.id, name: group.name})
    $(group.contact).each(function(contact){
        var temp_contact = new Contact(contact)
        temp.contact.push(temp_contact)
    });
    self.contactGroups.push(temp);
})

    function ContactGroup(data){
        var self = this;
        self.id = data.id;
        self.name = ko.observable(data.name);
        self.contact = ko.observableArray([]);

        function Contact(){
            this.name = ko.observable();
            this.email = ko.observable();
            this.telephone = ko.observable();
            this.mobile = ko.observable();
            this.mail_group = ko.observable();
            this.comment = ko.observable();
        }            

        self.addContact = function(){
            self.contact.push(new Contact);
        }

        self.removeContact = function(){
            self.contact.remove(this);
        }
    }

可观察数组是函数,因此如果要设置可观察数组,应使用
self.contactGroups(数组)而不是self.contactGroups.push(临时)


谢谢你的帮助。我明白这一点,但这并不能解决我的问题。我试图在ContactGroup对象的每个数组中创建一个Contact对象数组创建一个JSFIDLE可能吗?你想要的输出是什么?还不清楚。
 self.map = function() { 
       var groupArr = [];
       ko.utils.arrayForEach(this.items(), function(item) {
          var temp_contact = new Contact(contact)
           temp.contact.push(temp_contact)
           groupArr.push(temp)
        });

     self.contactGroups (groupArr);
  }