2015-02-27 25 views
5

Używam demo app-kontaktów, aby dowiedzieć Aurelia, tak wiem, to niekompletne, jak wspomniano przez @Eisenberg, ale potem myślałem, aby użyć EventAggregator powiadomić app.js, kiedy zapiszę skontaktuj się lub utwórz nowy kontakt. Do tej pory wszystko działa dobrze. Mogę otrzymać obiekt kontaktu w app.js, ale teraz chciałbym zaktualizować listę kontaktów, która nie działa, a kiedy zapisuję kontakt i aktualizuję listę kontaktów w app.js, zostaje on usunięty.Aktualizacja listy w Aurelia przy użyciu EventAggregator

Kod dodany w app.js i metodzie subskrypcji jest wywoływany w konstruktorze.

subscribe(){ 
    this.ea.subscribe('contact_event', payload => { 
     console.log(payload); 
     var instance = JSON.parse(JSON.stringify(payload)); 
     let found = this.contacts.filter(x => x.id == payload.id)[0]; 

     if(found){ 
      let index = this.contacts.indexOf(found); 
      this.contacts[index] = instance; 
     }else{ 
      instance.id = this.contacts.length + 1; 
      this.contacts.push(instance); 
     } 
    }); 
} 

wprowadzone żadne zmiany app.html

<li repeat.for="contact of contacts" class="list-group-item ${contact.id === $parent.selectedId ? 'active' : ''}"> 
    <a href="#" click.delegate="$parent.select(contact)"> 
    <h4 class="list-group-item-heading">${contact.firstName} ${contact.lastName}</h4> 
    <p class="list-group-item-text">${contact.email}</p> 
    </a> 
</li> 

Jak zaktualizować listę?

Aktualizacja ten pracował dla mnie, ale nie wiem, co jest właściwe podejście

subscribe(){  
    this.ea.subscribe('contact_event', payload => { 
    return this.api.getContactList().then(contacts => { 
     this.contacts = contacts; 
    }); 
    }); 
} 
+0

Powinieneś odpowiedzieć na swoje własne pytanie i oznaczyć je jako również annwered :) Powodzenia! –

Odpowiedz

1

Eric L. Anderson robi wielkie zadanie wyjaśnić jak to działa w swoim blogu: Aurelia's Event Aggregator. To wydarzenie to ten sam rodzaj kodu, który próbujesz zrobić!

Uwaga: prawdopodobnie jest już za późno, aby odpowiedzieć na pytanie Kishore'a, ale umieszczam link dla innych, którzy trafiają tutaj z wyszukiwarki.

Powiązane problemy