如何更新 aurelia 中的可观察对象
How to update an observable in aurealia
我正在将一个项目从 Durandal 转换到 Aurelia,之前我使用 observable 将输入的长度限制为 1(以及输入的最后一位数字)
这是我的:
HTML
<input autocomplete="off" type="number" class="otp" maxlength=1 id="otpa" value.bind="otpa.value" />
JavaScript:
'use-strict';
import { Router } from 'aurelia-router';
import { inject, BindingEngine } from 'aurelia-framework';
@inject(Router, BindingEngine)
export class Register {
otpa = {
value: '',
hasFocus: false
};
constructor(router, bindingEngine) {
this.router = router;
this.bindingEngine = bindingEngine;
}
activate = () => {
this.subscriptions = this.bindingEngine
.propertyObserver(this.otpa, 'value')
.subscribe(this.otpaValueChanged);
return true;
};
deactivate = () => {
this.subscriptions.dispose();
return true;
};
otpaValueChanged(newValue, oldValue) {
if (newValue.length > 1) {
this.otpa.value = newValue.substring(newValue.length - 1, newValue.length);
}
}
}
otpaValueChanged 函数在输入更改时触发,但是当长度 > 1 时,我收到错误“无法读取未定义的 属性 'opta'”。
我知道“this”是未定义的,但我不确定如何才能在这个函数中访问 opta?
或者还有其他方法可以解决这个问题吗?
提前致谢!
您可能需要像下面这样将您的订阅绑定到此:
activate = () => {
this.subscriptions = this.bindingEngine
.propertyObserver(this.otpa, 'value')
.subscribe(this.otpaValueChanged.bind(this));
return true;
};
我正在将一个项目从 Durandal 转换到 Aurelia,之前我使用 observable 将输入的长度限制为 1(以及输入的最后一位数字)
这是我的:
HTML
<input autocomplete="off" type="number" class="otp" maxlength=1 id="otpa" value.bind="otpa.value" />
JavaScript:
'use-strict';
import { Router } from 'aurelia-router';
import { inject, BindingEngine } from 'aurelia-framework';
@inject(Router, BindingEngine)
export class Register {
otpa = {
value: '',
hasFocus: false
};
constructor(router, bindingEngine) {
this.router = router;
this.bindingEngine = bindingEngine;
}
activate = () => {
this.subscriptions = this.bindingEngine
.propertyObserver(this.otpa, 'value')
.subscribe(this.otpaValueChanged);
return true;
};
deactivate = () => {
this.subscriptions.dispose();
return true;
};
otpaValueChanged(newValue, oldValue) {
if (newValue.length > 1) {
this.otpa.value = newValue.substring(newValue.length - 1, newValue.length);
}
}
}
otpaValueChanged 函数在输入更改时触发,但是当长度 > 1 时,我收到错误“无法读取未定义的 属性 'opta'”。
我知道“this”是未定义的,但我不确定如何才能在这个函数中访问 opta?
或者还有其他方法可以解决这个问题吗?
提前致谢!
您可能需要像下面这样将您的订阅绑定到此:
activate = () => {
this.subscriptions = this.bindingEngine
.propertyObserver(this.otpa, 'value')
.subscribe(this.otpaValueChanged.bind(this));
return true;
};