2015-08-31 229 views
0

我們有一個模型,其中有一些belongsTo和hasMany關係設置爲async:true。該API只傳遞ID。只要頁面加載Ember請求所有這些ID。EmberJs異步立即觸發

這是預期的行爲?我感覺這個數據在被調用時會被加載。

我該如何去了解爲什麼這些電話正在發生?

我們使用灰燼1.13.9和灰燼數據11年1月13日

編輯:原來我們有一些擴大我們的模型,被擊中所有這些異步關係。

+0

@ torazaburo的答案是相當深入,但如果你覺得不夠,你將不得不放棄更多的細節關於您的應用,例如您在使用關係的模板中的方式。 – locks

回答

2

我在這個印象之下,這個數據在被調用時會被加載。

你是什麼意思的「叫」?

說「加載需要」會更準確。

考慮以下幾點:

// 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 */) 
}