Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 多对象剔除映射_Javascript_Knockout.js - Fatal编程技术网

Javascript 多对象剔除映射

Javascript 多对象剔除映射,javascript,knockout.js,Javascript,Knockout.js,希望一些knockout.js大师能对此有所启发 我试图让Contact对象进入Contact observable数组,它本身就是ContactGroup对象中的一个observable数组,但我不知道如何做到这一点?这是可能的,还是我走错了路?谢谢 var json = {"contactGroups" : [ { "name" : "Contact Group", "contact" : [

希望一些knockout.js大师能对此有所启发

我试图让Contact对象进入Contact observable数组,它本身就是ContactGroup对象中的一个observable数组,但我不知道如何做到这一点?这是可能的,还是我走错了路?谢谢

var json =  
    {"contactGroups" : [
     {
             "name" : "Contact Group",
             "contact" : [
                     {
                             "name" : "aaaa",
                             "email" : "",
                             "telephone" : "",
                             "mobile" : "",
                             "mail_group" : "",
                             "comment" : ""
                     },
                     {
                             "name" : "bbbb",
                             "email" : "",
                             "telephone" : "",
                             "mobile" : "",
                             "mail_group" : "",
                             "comment" : ""
                     },
                     {
                             "name" : "cccc",
                             "email" : "",
                             "telephone" : "",
                             "mobile" : "",
                             "mail_group" : "",
                             "comment" : ""
                     }
             ]
     }
 ]}



function TechnicalViewModel(){
    self = this;

    var ContactGroups = ko.utils.arrayMap(json.contactGroups, function(item) {
        var group = new ContactGroup(item);
        var contacts = ko.utils.arrayMap(item.contact, function(item) {
        return new Contact(item)
        });
        group.contact(contacts)
        return group;
    })
    self.contactGroups(ContactGroups)

    function ContactGroup(data){
        var self = this;

        self.name = ko.observable(data.name);
        self.contact = ko.observableArray([]);

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

TechnicalView = new TechnicalViewModel
ko.applyBindings(TechnicalView);

您必须将
联系人
功能移到
联系人组
功能之外。它的范围限制在
ContactGroup
函数中,无法被
ko.utils.arrayMap
函数看到。将其移到外部会增加整个
TechnicalViewModel
的范围

function TechnicalViewModel(jsonData){
    self = this;

    var ContactGroups = ko.utils.arrayMap(jsonData.contactGroups, function(item) {
        var group = new ContactGroup(item);
        var contacts = ko.utils.arrayMap(item.contact, function(item) {
            return new Contact(item)
        });
        group.contact(contacts)
        return group;
    });

    self.contactGroups = ko.observableArray(ContactGroups);

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

    function ContactGroup(data){
        var self = this;

        self.name = ko.observable(data.name);
        self.contact = ko.observableArray([]);
    }
}

var technicalVM = new TechnicalViewModel(json);
ko.applyBindings(technicalVM);

看一看,看一看

ko.mapping.formJS允许这样做:

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

function Contact(data){
    ko.mapping.fromJS(data, {}, this);
 } 
当您希望基于服务器上的新数据刷新viewmodel时,ko.mapping.fromJS也很强大


希望能有帮助。

非常感谢!需要重新检查一下我的范围!