-
Notifications
You must be signed in to change notification settings - Fork 127
Open
Description
const resolvedValue = initializer
? Reflect.apply(initializer, this, [])
: Reflect.apply(get, this, []);
const decoratedValue = decorate(resolvedValue).bind(this);
if we need to decorator one property or getter()
// member field.
@track({ fieldName: 'fieldName' })
private fieldName = 'fieldName';
// getter
@track({ getName: 'getter() getMyName' })
private get getMyName() {
return this.parentMethod() + 'my name';
}
private handleTrack = () => {
console.log('handleTrack: property decorator:', this.getMyName, this.fieldName);
return {
result: '({} as any).name.handleTrack',
};
}
for property decorate will lazy execute, it will result in
const resolvedValue = initializer
? Reflect.apply(initializer, this, [])
: Reflect.apply(get, this, []);
// resolvedValue value will be string,
// but if we execute
const decoratedValue = decorate(resolvedValue).bind(this);
// will aways return us a function.
so maybe we need to do some check here like below code:
const decoratedValue = isFunction(resolvedValue)
? decorate(resolvedValue, name).bind(this)
// for getter, member field we need to direct evaluate this express. and get the final value to consumer.
: Reflect.apply(decorate(() => resolvedValue, name), this, []);