5

私は app-contacts デモを使用して Aurelia を学習しています。@Eisenberg が述べたように不完全ですが、連絡先を保存するか新しい連絡先を作成するときに、EventAggregator を使用して app.js に通知することを考えました。今まではすべて正常に動作しています。app.js で連絡先オブジェクトを受け取ることができますが、連絡先リストを更新したいのですが、これは機能していません。連絡先を保存して app.js で連絡先リストを更新すると、削除されます。

app.js に追加されたコードと subscribe メソッドがコンストラクターで呼び出されます。

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

1 に答える 1

1

Eric L. Anderson は、ブログ投稿 Aurelia's Event Aggregatorで、これがどのように機能するかをうまく説明しています。それはあなたがやろうとしているのと同じタイプのコードです!

注: キショアの質問に答えるには遅すぎるかもしれませんが、検索からここにたどり着いた他の人のためにリンクを貼っておきます。

于 2016-02-12T03:09:35.453 に答える