我有一个名为client.html的父级。
我有一个名为address.html的孩子。
我使用compose元素在父视图模型中显示子项:
<compose view-model="../address/address" model.bind="client.address"></compose>
client.address类型是AddressDetails(下面)。
客户端视图(address.ts)中的我从父级访问数据 - &#34; client.Address&#34;使用激活功能:
activate(model: AddressDetails) {
if (model) {
this.address.deserialize(model);
}
}
我也尝试过:
activate(model: AddressDetails)
this.address = model;
}
在address.ts中的我在address.ts中设置我的绑定对象如下:
export class Address {
address = new AddressDetails;
...
将地址对象设置为模型,因为这会将地址指针设置为模型。
..和我的addressDetails类(具有反序列化功能)是:
export class AddressDetails implements Serializable<AddressDetails> {
address1: string;
address2: string;
suburb: string;
postcode: string;
stateShortName: string;
addressLocationId: number;
deserialize(input) {
console.log("INPUT: ", input)
this.address1 = input.address1;
this.address2 = input.address2;
this.suburb = input.suburb;
this.postcode = input.postcode;
this.stateShortName = input.stateShortName;
this.addressLocationId = input.addressLocationId;
return this;
}
}
Address.html(子)的一部分在下面显示了Address1的绑定:
<input type="text" value.bind="address.address1" class="form-control" id="address1" placeholder="Address 1st line...">
因此,当我将client.address传递给compose元素时,它会工作,并且我将获得client.address已填充的所有字段显示在组合元素上。
所以数据会传递给孩子(address.html)
然而,当需要保存数据时,我没有双向绑定。对于那些将client.address传递给地址视图/ viewmodel的实例,在客户端(父级)上没有获取任何更改。它将数据传递下来但没有备份。
我已将模型设置为在子项中处理,但模型未在父项中更新。
如何在传递数据对象时进行合成,以便它以两种方式工作?
它是双向的吗?如果是这样,我做错了什么?
答案 0 :(得分:0)
出于多种原因,Compose的设计并不像真正的自定义元素那样工作。您可以做的是将父对象传递给compose,然后与子对象的属性绑定:
<!-- parent template -->
<template>
<compose model.bind="details"></compose>
</template>
<!-- child template -->
<template>
Address:
<input value.bind="details.address" />
Postcode:
<input value.bind="details.postcode" />
</template>