来自具有额外属性的 JS 的淘汰赛映射
Posted
技术标签:
【中文标题】来自具有额外属性的 JS 的淘汰赛映射【英文标题】:knockout mapping from JS with extra proeprties 【发布时间】:2018-04-19 16:44:55 【问题描述】:我有这个 JSON 结构。
"customer":
"idcustomer": 2,
"name": "test_2",
"vat": "test_vat_2",
"obs": "obs_2",
"deleted": 0
,
"addresses": [
"idaddress": 9,
"street": "street_2_9",
"number": "number_2_9",
"country": "country_2_9",
"default": true,
"label": "labe_2_9",
"deleted": 0
,
"idaddress": 10,
"street": "1",
"number": "number_2_9",
"country": "country_2_10",
"default": false,
"label": "label_2_10",
"deleted": 0
],
"contacts": []
使用淘汰赛映射插件,我能够生成淘汰赛可观察对象。但是,当尝试使用映射参数向对象添加额外属性时,我发现了一些问题。目标是将“SelectedAddress”添加到主对象,并在每个地址中添加一个“defaultLabel”观察值。
目前我有这个映射结构来将属性添加到地址子项:
var mapping =
'addresses':
create: function (options)
return (new (function ()
this.defaultLabel= ko.computed(function ()
return (this.default() == 0) ? "" : this.label();
, this);
ko.mapping.fromJS(options.data, , this);
)());
,
并将“SelectedAddress”添加到主 JSON:
create: function (options)
return new function ()
var model = ko.mapping.fromJS(options.data, , this);
// Direccion
model.direccionSeleccionada = ko.observable();
model.getDireccion = ko.computed(
read: function()
if (model.direccionSeleccionada() != null)
return model.direccionSeleccionada();
else
return [
idaddress: -1,
street : '',
number: '',
country: '',
default: '',
label: '',
deleted: '',
];
,
write: function(value)
self.direccionSeleccionada(value);
,
owner: self
);
我找不到同时拥有它们的方法
想法?
谢谢
【问题讨论】:
【参考方案1】:我想通了。只为某人;就像生成“地址”的映射一样简单,为它添加另一个映射。
var mapping =
create: function (options)
return new function ()
var model = ko.mapping.fromJS(options.data,
'adresses':
create: function (options)
return (new(function ()
this.labelDefault= ko.computed(function ()
return (this.default() == 0) ? "" : this.label();
, this);
ko.mapping.fromJS(options.data, , this);
)( /* call the ctor here */ ));
,
, this);
model.direccionSeleccionada = ko.observable();
model.getDireccion = ko.computed(
read: function ()
if (model.selectedAddress() != null)
return model.selectedAddress();
else
return [
idaddress: -1,
street: '',
number: '',
country: '',
default: '',
label: '',
deleted: ''
];
,
write: function (value)
self.selectedAddress(value);
,
owner: self
);
谢谢!
【讨论】:
以上是关于来自具有额外属性的 JS 的淘汰赛映射的主要内容,如果未能解决你的问题,请参考以下文章
反对 js:无法使用连接表额外属性更新多对多关系。说附加属性无效