[英]Aurelia - Custom element property binding resolution
我创建了一个具有@bindable
属性的自定义元素。 在元素的构造函数中,使用bound属性的值设置另一个属性。 这是自定义元素的代码(文件名custom-element.ts
):
import {bindable} from 'aurelia-framework';
export class CustomElement{
@bindable value: any = null;
message: any;
constructor(){
this.message = this.generateMessage();
}
generateMessage(){
if (this.value != null){
// logic to generate and return message
} else {
return "Someting went wrong";
}
}
}
该模型具有一个简单的相关视图(文件名custom-element.html
):
<template>
The value id is: ${value.id}, and the message is: ${message}
</template>
我在其他视图中使用此元素,该模型的模型可以访问value
对象:
<require from="resources/custom-element"></require>
<custom-element value.bind="value"></custom-element>
尽管${value.id}
正确显示,但${message}
始终Something went wrong
。
何时设置value
,如何使用其值设置message
?
最初创建自定义元素时将调用构造函数,但是数据绑定将在其生命周期的后期进行。
为了获得对绑定属性的访问,您需要使用bind
生命周期回调 (或根据实际需要attached
)来设置message
:
export class CustomElement{
@bindable value: any = null;
message: any;
bind() {
this.message = this.generateMessage();
}
generateMessage(){
if (this.value != null){
// logic to generate and return message
} else {
return "Someting went wrong";
}
}
}
作为一种替代解决方案,您可以通过实现以下命名约定的方法来订阅您的value
属性更改事件: yourPropertyChanged
(因此,在您的情况下为valueChanged
),并在该处生成消息:
valueChanged(newValue) {
this.message = this.generateMessage(newValue);
}
generateMessage(newValue){
if (newValue != null){
// logic to generate and return message
} else {
return "Someting went wrong";
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.