我有一个代表DB中“玩家”的模型对象。在它的实现中有一系列的玩家,我想从我的应用程序中的不同VM绑定。例如:
import {Players} from './models/players';
import {inject, BindingEngine} from 'aurelia-framework';
@inject(Players,BindingEngine)
export class App {
constructor(playersProvider,bindingEngine) {
this._playersProvider = playersProvider;
this._bindingEngine = bindingEngine;
this._subscription = this._bindingEngine.propertyObserver(this,this._playersCount)
.subscribe(this.objectValueChanged);
}
async activate() {
await this._playersProvider.initialize();
this._playersCount = this._playersProvider.players.length;
}
objectValueChanged(newVal,oldVal) {
console.log("new : " + newVal + ", old val : " + oldVal);
}
deactivate() {
this._subscription.dispose();
}
}
不幸的是,当对播放器阵列(来自应用程序中的其他部分)进行更改时,更改不会反映在_playersCount属性中。例如 - 不会刷新绑定到此属性的UI标签,并且永远不会调用objectValueChanged。
U在同一阵列上具有collectionObserver的不同VM中存在相同的问题。
任何帮助?
答案 0 :(得分:1)
您是否尝试在订阅之前在构造函数中声明_playersCount?
同样,synthax似乎不正确,应该根据this article:
import {BindingEngine, inject} from 'aurelia-framework';
@inject(BindingEngine)
class MyClass {
constructor(bindingEngine) {
this.bindingEngine = bindingEngine;
this.observeMe = 'myvalue'; // the property is first initialized in the constructor
let subscription = this.bindingEngine
.propertyObserver(this, 'observeMe') // <= you wrote this._bindingEngine.propertyObserver(this,this.observeMe)
.subscribe(this.objectValueChanged);
// Dispose of observer when you are done via: subscription.dispose();
}
objectValueChanged(newValue, oldValue) {
console.log(`observeMe value changed from: ${oldValue} to:${newValue}`);
}
}
async关键字可能会影响该行为。 如果它仍然不起作用,您可以使用事件聚合器来广播更改。