[英]Ember Octane - Display contents of a Tracked Array from Controller in Template?
我正在嘗試從模板中呈現對存儲在控制器中的數組內容的訪問。 數組開始為空,但使用控制器中的方法將對象添加到其中:
import Controller from '@ember/controller';
import {action} from '@ember/object';
import {tracked} from '@glimmer/tracking';
export default class ControllerName extends Controller {
@tracked
displayedArray = new Array();
@action
async setUpArray(){
let object1 = {Key1:[1,2], Key2: [3,4]};
let object2 = {Key1:[5,6], Key2: [7,8]};
this.displayedArray.push(object1);
this.displayedArray.push(object2);
}
}
我能夠從模板調用setUpArray()並確認它按預期運行並將跟蹤變量設置為兩個對象的數組。
不過,我似乎並沒有能夠在模板與displayedArray顯示任何東西。 我嘗試了以下方法:
//Returns blank - I expected [object,object]
{{this.displayedArray}}
//Returns blank
{{this.displayedArray 0}}
//Returns 0 before and after the *setUpArray()* function is called
{{this.displayArray.length}}
據我所知,這個問題只發生在數組或至少包含對象的數組中。 我能夠很好地顯示在控制器中設置的字符串或其他跟蹤變量。
有誰知道為什么 Ember 沒有顯示這個?
在 Octane 中,對象不會被@tracked
深入。 以下任何一項都應該有效:
this.displayedArray = [...this.displayedArray, object1, object2];
import { tracked } from 'ember-deep-tracked';
export default class ControllerName extends Controller {
@tracked displayedArray = new Array();
}
如果數組元素之一發生更改,則不會自動跟蹤數組。 你不能這樣做:
this.displayedArray.push(object1);
但是,如果您更改整個數組,例如使用擴展運算符,它們會被跟蹤:
this.displayedArray = [...this.displayedArray, object1, object2]
或者最終您可以使用EmberArray ,請參閱https://guides.emberjs.com/release/in-depth-topics/autotracking-in-depth/#toc_arrays
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.