2015-05-17 3 views
12

Предположим, у меня есть массив элементов и в дополнение к отображению списка в моем приложении, я хочу синхронизировать список с сервером с помощью HttpClient. Как я могу наблюдать изменения в массиве? Я пробовал:Подписка на Array в Aurelia

@inject(ObserverLocator) 
export class ViewModel { 

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

Но я не получил ни сообщения об ошибке, ни сообщения журнала.

+0

Достаточно ли было бы просмотреть список.length? Не будет ли проще видеть, как происходят изменения? – sam

ответ

25

getObserver возвращает свойство observer, которое уведомит вас, когда изменения свойства класса ViewModel изменятся. Это произойдет только при назначении нового значения для свойства list, то есть this.list = [1,2,3]. Если вы не назначаете новые значения для свойства list и вместо этого изменяете значение свойства через push, pop, splice и т. Д., Вы захотите использовать наблюдателя массива. Используйте ObserverLocator «s 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 Обновление

ObserverLocator является Аурелии внутренний„голый металл“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(); 
    } 
} 
+0

Синтаксис здесь вообще изменился? –

+0

Не знаю, что я знаю –

+0

, мы никогда не добавляли ничего простого, как import {observ} из 'aurelia-framework'; наблюдать (ничего, обратный вызов)? –