0
我們有一個模型,其中有一些belongsTo和hasMany關係設置爲async:true。該API只傳遞ID。只要頁面加載Ember請求所有這些ID。EmberJs異步立即觸發
這是預期的行爲?我感覺這個數據在被調用時會被加載。
我該如何去了解爲什麼這些電話正在發生?
我們使用灰燼1.13.9和灰燼數據11年1月13日
編輯:原來我們有一些擴大我們的模型,被擊中所有這些異步關係。
我們有一個模型,其中有一些belongsTo和hasMany關係設置爲async:true。該API只傳遞ID。只要頁面加載Ember請求所有這些ID。EmberJs異步立即觸發
這是預期的行爲?我感覺這個數據在被調用時會被加載。
我該如何去了解爲什麼這些電話正在發生?
我們使用灰燼1.13.9和灰燼數據11年1月13日
編輯:原來我們有一些擴大我們的模型,被擊中所有這些異步關係。
我在這個印象之下,這個數據在被調用時會被加載。
你是什麼意思的「叫」?
說「加載需要」會更準確。
考慮以下幾點:
// parent-model
children: hasMany('children', { async: true })
// parent-controller
displayChildren: false
// child-model
name: attr()
// template
{{#if displayChildren}}
{{#each model.children as |child|}}
{{child.name}}
{{/each}}
{{/if}}
由於displayChildren
是假的,在模板中的循環將不被執行。因此,孩子們不需要。因此他們不會被檢索。當displayChildren
設置爲true時,模板需要孩子,並且將被檢索。如果displayChildren
的初始值爲true,則在渲染時將立即檢索這些孩子。
還有另一種情況,異步關係引用的記錄將被加載:當他們調用get
時(這是當模板試圖獲取它們時發生的情況)。這get
將返回實際價值的承諾。因此,如果由於某種原因,你需要或者希望從程序邏輯訪問的孩子,你寫的東西是這樣的:
// parent-controller
someFunc() {
this.get('model.children') . then(children => /* do something with children */)
}
@ torazaburo的答案是相當深入,但如果你覺得不夠,你將不得不放棄更多的細節關於您的應用,例如您在使用關係的模板中的方式。 – locks