我有這個屬性裝飾,貫穿其中的轉換器的屬性值,所以我可以使用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