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



我有一个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;
}

当状态对象上的参数值发生变化时,屏幕上的下拉列表会明显变化,但parameterChanged()valueChanged()不会触发。

有人知道这里发生了什么吗?我可以尝试解决这个问题吗?感谢任何帮助。。。

因为我使用的是Aurelia Store,所以我应该使用状态更改的订阅,如下所示:

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

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

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

最新更新