我现在正在学习 Aurelia 几个星期,我似乎遇到了自定义属性的数据绑定问题。
我创建了以下square
自定义属性(基于Aurelia 网站上“模板:自定义属性”指南中的示例):
方.ts:
import { bindable, autoinject } from "aurelia-framework";
@autoinject
export class SquareCustomAttribute {
@bindable sideLength = "100px";
@bindable color = "red";
constructor(private element: Element) {
this.sideLengthChanged(this.sideLength);
this.colorChanged(this.color);
}
sideLengthChanged(newValue: string) {
if (this.element instanceof HTMLElement) {
this.element.style.width = this.element.style.height = newValue;
}
}
colorChanged(newValue: string) {
if (this.element instanceof HTMLElement) {
this.element.style.backgroundColor = newValue;
}
}
}
我希望这个自定义属性可以在没有显式绑定的情况下使用,在这种情况下它应该使用默认值,就像在这个消费视图中一样:
应用程序.html:
<template>
<require from="./square"></require>
<div square></div>
</template>
上面的代码工作正常。div
它将100px 边和红色背景渲染为正方形。
当我将color
属性设置SquareCustomAttribute
为主要属性(使用@bindable
的配置对象参数)时出现问题,如下所示:
更新 square.ts:
import { bindable, autoinject } from "aurelia-framework";
@autoinject
export class SquareCustomAttribute {
@bindable sideLength = "100px";
@bindable({ primaryProperty: true }) color = "red";
constructor(private element: Element) {
this.sideLengthChanged(this.sideLength);
this.colorChanged(this.color);
}
sideLengthChanged(newValue: string) {
if (this.element instanceof HTMLElement) {
this.element.style.width = this.element.style.height = newValue;
}
}
colorChanged(newValue: string) {
if (this.element instanceof HTMLElement) {
this.element.style.backgroundColor = newValue;
}
}
}
出于某种原因,设置color
为自定义属性的主要属性,colorChanged
回调现在被调用两次:首先由构造函数使用默认值,然后再次从生命周期初始化的某个地方使用空值。
如何避免第二次调用回调,以便当我没有在消费视图的 HTML 标记中colorChanged
明确提供属性的绑定/值时,我的自定义属性的主要属性的默认值不会被清除?square