我们有一个模型,其中包含许多belongsTo和hasMany关系,设置为async:true。 API仅传递ID。页面加载后,Ember会立即请求所有这些ID。
这是预期的行为吗?我觉得这个数据会在调用时被加载。
我该如何解决为什么这些电话正在发生?
我们使用的是Ember 1.13.9和Ember-data 1.13.11
编辑:事实证明,我们的模型正在扩展所有这些异步关系。
答案 0 :(得分: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
为false,因此不会执行模板中的循环。因此不需要孩子。因此,他们将无法被检索。当displayChildren
设置为true时,模板将需要子项,并将检索它们。如果displayChildren
的初始值为true,则在渲染时将立即检索子项。
还有另一种情况,即异步关系引用的记录将被加载:为它们调用get
时(这是模板试图获取它们时发生的事情) 。此get
将返回实际值的承诺。因此,如果由于某种原因你需要或想要从程序逻辑中访问子代,你可以这样写:
// parent-controller
someFunc() {
this.get('model.children') . then(children => /* do something with children */)
}