Aurelia中的数组订阅

时间:2015-05-17 05:06:26

标签: javascript aurelia aurelia-binding

假设我有一系列元素,除了在我的应用中显示列表外,我还想将列表与HttpClient同步到服务器。如何观察阵列的变化?我试过了:

@inject(ObserverLocator)
export class ViewModel {

    constructor(obsLoc) {
        this.list = [];
        obsLoc.getObserver(this, 'list');
            .subscribe(li => console.log(li));
    }
}

但我既没有错误也没有记录消息。

1 个答案:

答案 0 :(得分:27)

getObserver返回一个属性观察者,当ViewModel类实例的list属性发生变化时,它将通知您。只有在为list属性分配新值时才会发生这种情况,即this.list = [1,2,3]。如果您没有为list属性分配新值,而是通过pushpopsplice等来改变该属性的值,那么您&# 39; ll想要使用数组观察者。使用ObserverLocator' getArrayObserver方法 - 它需要一个参数,即您要观察的数组:

import {ObserverLocator} from 'aurelia-binding'; // or from 'aurelia-framework'

@inject(ObserverLocator)
export class ViewModel {

    constructor(obsLoc) {
        this.list = [];
        obsLoc.getArrayObserver(this.list);
            .subscribe(splices => console.log(splices));
    }
}

2015年10月更新

ObserverLocator是Aurelia的内部"裸机" API。现在可以使用绑定引擎的公共API:

import {BindingEngine} from 'aurelia-binding'; // or from 'aurelia-framework'

@inject(BindingEngine)
export class ViewModel {
  constructor(bindingEngine) {
    this.list = []; // any Array, Map and soon Set will be supported

    // subscribe
    let subscription = bindingEngine.collectionObserver(this.list)
      .subscribe(splices => console.log(splices));

    // be sure to unsubscribe **later**
    subscription.dispose();
  }
}