Ответ 1
В некоторых плагинах я использую DI, чтобы получить экземпляр ObserverLocator
из контейнера:
import {inject} from 'aurelia-dependency-injection'; // or from 'aurelia-framework'
import {ObserverLocator} from 'aurelia-binding'; // or from 'aurelia-framework'
@inject(ObserverLocator)
export class Foo {
constructor(observerLocator) {
this.observerLocator = observerLocator;
}
...
}
Затем вы можете сделать что-то вроде этого:
var subscription = this.observerLocator
.getObserver(myObj, 'myPropertyName')
.subscribe(myCallback);
Когда вы готовы отказаться от подписки, вызовите его:
subscription();
Я думаю, что все это может измениться, но это то, что вы могли бы использовать прямо сейчас, если вам нужно.
Подробнее здесь
Обновление за октябрь 2015 г.
ObserverLocator - это внутренний API "голый металл" Aurelia. Теперь существует общедоступный API для механизма привязки, который можно использовать:
import {inject} from 'aurelia-dependency-injection'; // or from 'aurelia-framework'
import {BindingEngine} from 'aurelia-binding'; // or from 'aurelia-framework'
@inject(BindingEngine)
export class ViewModel {
constructor(bindingEngine) {
this.obj = { foo: 'bar' };
// subscribe
let subscription = bindingEngine.propertyObserver(this.obj, 'foo')
.subscribe((newValue, oldValue) => console.log(newValue));
// unsubscribe
subscription.dispose();
}
}