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
没有改变,parameter
的 value
属性 正在改变
我有一个 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()
orvalueChanged()
do not fire.
有谁知道这里发生了什么以及我可以尝试解决这个问题吗?任何帮助表示赞赏...
因为我正在使用 Aurelia Store 我应该使用状态更改订阅如下:
@connectTo({
selector: {
parameter: (store) => store.state.pipe(pluck("parameter"))
}
})
parameterChanged() {
this.validate();
}
这没有按预期工作的原因是:
valueChanged()
绑定到 元素的 更改函数,因为值正在更改,所以不会触发。parameterChanged()
不会触发,因为parameter
没有改变,parameter
的value
属性 正在改变