Обновление списка в Aurelia с помощью EventAggregator

Я использую демо app-contacts для изучения Aurelia, да, я знаю, что оно неполное, как упомянуто @Eisenberg, но потом я подумал использовать EventAggregator, чтобы уведомить app.js, когда я сохраняю контакт или создаю новый контакт. До сих пор все работает нормально. Я могу получить объект контакта в app.js, но теперь я хотел бы обновить список контактов, который не работает, и когда я сохраняю контакт и обновляю список контактов в app.js, он удаляется.

Код, добавленный в app.js и метод подписки, вызывается в конструкторе.

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);
        }
    });
}

В 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>

Как обновить список?

Обновление Это работает для меня, но не уверен, что это правильный подход

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

1 ответ

Решение

Эрик Л. Андерсон отлично объясняет, как это работает, в своем блоге: агрегатор событий Aurelia. Это событие того же типа кода, который вы пытаетесь сделать!

Примечание: возможно, уже слишком поздно, чтобы ответить на вопрос Кишора, но я добавляю ссылку для других, кто попал сюда из поиска.

Другие вопросы по тегам