Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.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 knockout.js嵌套对象中的多重映射_Javascript_Knockout.js - Fatal编程技术网

Javascript knockout.js嵌套对象中的多重映射

Javascript knockout.js嵌套对象中的多重映射,javascript,knockout.js,Javascript,Knockout.js,我刚接触knockout.js,不知道如何对我的对象进行多重映射。 这是我从服务器获取的数据: var persons = { 'value': [ { "id": "1", "civility": "Mr.", "firstname": "john", "lastname": "doe", "phone": "00 00 00 00 00",

我刚接触knockout.js,不知道如何对我的对象进行多重映射。 这是我从服务器获取的数据:

var persons = {
    'value': [
        {
            "id": "1",
            "civility": "Mr.",
            "firstname": "john",
            "lastname": "doe",
            "phone": "00 00 00 00 00",
            "email": "email@email.com",
            "contract": [
                {
                    "id": "1",
                    "gamme": "Gamme 1",
                    "formula": "Formula 1"
                },
                {
                    "id": "2",
                    "gamme": "Gamme 2",
                    "formula": "Formula 2"
                }
            ]
        }
    ]
}
我对整个对象进行了第一次映射,并计算了一些数据:

var person_mapping = {
        'value': {
            create: function (options) {
                if (options.data != null) {
                    return new myPersonModel(options.data);
                }
            }
        }
    }

var myPersonModel = function (data) {
        ko.mapping.fromJS(data, {}, this);

        this.fullName = ko.computed(function () {
            return this.civility() + ' ' + this.lastname() + ' ' + this.firstname();
        }, this);
    }
执行此操作后,我得到了第一部分所需的内容:

self.dataModel = ko.mapping.fromJS(persons, person_mapping);
但是现在,我想对persons对象中的contract数组做同样的事情,也就是说应用一个映射并执行一些ko.computed,如下所示:

var contract_mapping = {
            'contract': {
                create: function (options) {
                    if (options.data != null) {
                        return new myContractModel(options.data);
                    }
                }
            }
        }

var myContractModel = function (data) {
            ko.mapping.fromJS(data, {}, this);

            this.contractName = ko.computed(function () {
                return this.gamme() + ' ' + this.formula();
            }, this);
        }

但是我不知道如何应用我的第二个映射,似乎没有任何效果。

您可以在myPersonModel的第一行应用第二个映射。您可以在正在使用的每个构造函数中不断嵌套映射策略

var myPersonModel = function(data) {
  ko.mapping.fromJS(data, contract_mapping, this);
  /* ... */
};
var个人={
“价值”:[{
“id”:“1”,
“礼貌”:“先生”,
“名字”:“约翰”,
“姓氏”:“能源部”,
“电话”:“00 00 00”,
“电子邮件”:email@email.com",
“合同”:[{
“id”:“1”,
“gamme”:“gamme1”,
“公式”:“公式1”
},
{
“id”:“2”,
“gamme”:“gamme2”,
“公式”:“公式2”
}
]
}]
}
var契约映射={
“合同”:{
创建:函数(选项){
返回新的myContractModel(options.data);
}
}
}
变量person_映射={
“价值”:{
创建:函数(选项){
如果(options.data!=null){
返回新的myPersonModel(options.data);
}
}
}
}
var myContractModel=函数(数据){
fromJS(数据,{},this);
this.type=“myContractModel”;
};
var myPersonModel=函数(数据){
fromJS(数据,合同映射,this);
this.fullName=ko.computed(函数(){
返回this.civility()+“”+this.lastname()+“”+this.firstname();
},这个);
}
console.log(
fromJS(persons,person\u映射)
.value()[0]
.contract().map(x=>x.type)
);

谢谢你,它太简单了,我没有想到这一点。我试图在第一次之后进行映射,而我必须在第一次中进行映射。