Javascript knockout.js嵌套对象中的多重映射
我刚接触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",
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)
);代码>
谢谢你,它太简单了,我没有想到这一点。我试图在第一次之后进行映射,而我必须在第一次中进行映射。