如何更新 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;
};