仍試圖找到Aurelia JS - Making a synchronous HTTP request, to change data before page load?的答案 - 所以我將它縮小到以下問題。Aurelia - 如何更改綁定變量,以便GUI更改?
比方說,我們接觸經理完成教程:
...其代碼也被複制在https://gist.run/?id=c73b047c8184c052b4c61c69febb33d8 ...
現在,我這是怎麼讀代碼:contact-list.js
,ContactList
類的constructor()
,我們有:
export class ContactList {
static inject = [WebAPI, EventAggregator];
constructor(api, ea){
this.api = api;
this.contacts = [];
...
...所以在構造函數中,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
只是一個簡單的分配給一個新的數據數組。
因此,爲此,幾秒鐘後確實會出現警告窗口;它確實會說「changeContactList done 1
」,這意味着this.contacts
陣列確實已更改爲新數據 - 除了GUI中沒有任何更改?!
那麼我做錯了什麼?我應該調用一個額外的函數來更新狀態?但是如果我必須調用一個額外的函數,那麼綁定又有什麼意義呢?換句話說 - 我必須做什麼才能讓GUI更新並顯示this.contacts
陣列的新變化狀態?