Aurelia JS - Making a synchronous HTTP request, to change data before page load?への回答をまだ見つけようとしていますので、私はそれを次の質問に還元しました。Aurelia - バウンド変数を変更する方法、GUIが変わる?
のは、我々は、コンタクトマネージャーのチュートリアルで作業しましょう:
...そのコードも今https://gist.run/?id=c73b047c8184c052b4c61c69febb33d8 ...
にコピーされ、これは私が読んでどのようにありますコード:contact-list.js
のconstructor()
のContactList
クラスでは、私たちは:
...コンストラクタでは、ContactList
クラスのthis.contacts
が空の配列に初期化されます。
そして、同じContactList
クラスにおいて、created()
方法がある:
created(){
this.api.getContactList().then(contacts => this.contacts = contacts);
}
これはweb-api.js
で定義されている連絡先リストを取得し、それが以前に空であったクラスContactList
性this.contacts
、に割り当て。
最後に、contact-list.html
に、我々は持っている:
<li repeat.for="contact of contacts" class="list-group-item ${contact.id === $parent.selectedId ? 'active' : ''}">
...
が...これは明らかにクラスContactList
のthis.contacts
を反復処理し、それに基づいてHTMLのGUIで<li>
(およびその他)の要素になります。
ContactList
クラスのthis.contacts
プロパティが変更されるたびに、<li repeat.for="contact of contacts" ...
が再度実行され、データに従って更新されたGUIが表示されるという考えがあります。
しかし、私はこれを実証することができません。最も簡単には、私が考えた、ContactList
のcreated()
方法が実行された後に関数が数秒を実行持っているだろうので、私はそのためのsetTimeout
使用しようとした:
created(){
this.api.getContactList().then(contacts => this.contacts = contacts);
setTimeout(this.changeContactList, 3000); // call changeContactList() function after 3 seconds
}
を...と私が追加しましたこれですchangeContactList
方法:
changeContactList() {
this.contacts = [ {
id:13,
firstName:'Bob',
lastName:'Rock',
email:'[email protected]',
phoneNumber:'888-7303'
}
];
alert("changeContactList done " + this.contacts.length);
}
だから、それは新しいデータ配列にContactList
クラスのthis.contacts
の単純な割り当てです。
だから、私は実際に数秒後に警告ウィンドウを表示します。 this.contacts
配列が実際に新しいデータに変更されたことを意味する "changeContactList done 1
"と表示されますが、GUIに変更はありません。
どうしたのですか?私は、更新された状態をレンダリングするために追加の関数を呼び出すはずですか?しかし、追加機能を呼び出さなければならない場合、バインディングのポイントは何ですか?つまり、GUIを更新して、this.contacts
配列の新しく変更された状態を表示するには、何をしなければなりませんか?