EmberJs Async立即射击

时间:2015-08-31 21:28:08

标签: ember.js ember-data

我们有一个模型,其中包含许多belongsTo和hasMany关系,设置为async:true。 API仅传递ID。页面加载后,Ember会立即请求所有这些ID。

这是预期的行为吗?我觉得这个数据会在调用时被加载。

我该如何解决为什么这些电话正在发生?

我们使用的是Ember 1.13.9和Ember-data 1.13.11

编辑:事实证明,我们的模型正在扩展所有这些异步关系。

1 个答案:

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