Aurelia 应用程序中的值更改时不会触发事件

Events not firing when value changes in Aurelia app

我有一个 Aurelia 应用程序使用 Store 来管理组件之间的状态。

在我的下拉组件中,我进行了验证(不是框架验证,只是应该在 ViewModel 发生变化时调用的代码),当值发生变化时应该触发:

<select value.bind="parameter.value"
        change.delegate="valueChanged()"
        class.bind="isValid ? '' : 'has-error'">
        ... 
</select>

在 ViewModel 中,验证工作如下:

@bindable() parameter: Parameter;

parameterChanged() {
    this.validate();
}    

valueChanged() {
    this.validate();
}

private validate() {
    this.isValid = this.parameter.value != '0';
}

参数模型如下所示:

export interface Parameter {
    value: string;   
    ...
}

Parameter 由父组件传递给该组件,其中值可以在由 Store 管理的状态对象上更改。

当调用以下操作更改 State 对象上的值时,该值可能会发生变化:

export async function changeValue(state: State, value: string) {
    const newState = Object.assign({}, state);
    newState.setup.parameter.value = value;
    return newState;
}

When the parameter value changes on the state object the dropdown visibly changes on the screen, but parameterChanged() or valueChanged() do not fire.

有谁知道这里发生了什么以及我可以尝试解决这个问题吗?任何帮助表示赞赏...

因为我正在使用 Aurelia Store 我应该使用状态更改订阅如下:

@connectTo({
    selector: {
        parameter: (store) => store.state.pipe(pluck("parameter"))
    }
})

parameterChanged() {
    this.validate();
}

这没有按预期工作的原因是:

  • valueChanged() 绑定到 元素的 更改函数,因为值正在更改,所以不会触发。
  • parameterChanged() 不会触发,因为 parameter 没有改变,parametervalue 属性 正在改变