我有这个属性装饰,贯穿其中的转换器的属性值,所以我可以使用some-bindable-value="true"
视图模板中:奥里利亚绑定值转换器(布尔等)
function valueConverter(converter: Function) {
return (target: any, key: string) => {
let definition = Object.getOwnPropertyDescriptor(target, key);
if (definition) {
Object.defineProperty(target, key, {
get: definition.get,
set: newValue => {
definition.set(converter(newValue));
},
enumerable: true,
configurable: true
});
} else {
Object.defineProperty(target, key, {
get: function() {
return this['__' + key];
},
set: function (newValue) {
this['__' + key] = converter(newValue);
},
enumerable: true,
configurable: true
});
}
}
}
class App {
@valueConverter(value => value == 'true') public someBooleanValue;
constructor() {
this.someBooleanValue = 'false';
console.log(this.someBooleanValue) // false
this.someBooleanValue = 'true';
console.log(this.someBooleanValue) // true
}
}
这工作得很好,只要我也不使用@bindable
修饰器(这使得它完全没有意义)。我是新来的装饰者,我不知道如何使这个工作与奥里利亚的财产观察机制。
我有点困惑,你能描述一下你想做多一点吗?转换器在视图的binding属性中使用了一个像这样的管道:some-bindable-prop.bind =“mybinding | myconverter”'超越了这个你想要达到什么目的?一个codepen或什么也会有很大的帮助。 – 4imble
无法在Aurelia中指定可绑定属性的类型。这意味着我不能像' my-component>'那样做,只有 my-component>'。第一种情况将是一个字符串。 [GitHub上的一个问题](https://github.com/aurelia/binding/issues/347)更深入地讨论了这个问题。我试图创建一个装饰器,将字符串属性转换为布尔值,所以值是一致的。我打算有多个转换器并将它们用作'@valueConverter(BooleanConverter)'。 –
marekpw
对不起,我没有意识到Aurelia已经在使用它。 – marekpw