灰烬数据和关系。性能

时间:2014-01-01 21:50:49

标签: ember.js ember-data

这是我的第二个Ember应用程序,以下问题是一个反复出现的主题。

我正在使用Ember js和Ember数据的Canary构建,并启用了查询参数。

假设我们有以下关系:

  • A有很多B
  • A有很多C
  • A有很多D
  • A有很多E

模型B,C,D,E是巨大的模型,资源很重,可用于渲染。所以一直加载它们并不是最佳的。

假设我的应用程序有一个允许快速浏览应用程序状态的仪表板,并且它侧重于模型A.我不需要显示B,C,D,E中的任何内容。所以JSON不会从example.com/api/a端点返回关系ID数组。

如果用户点击模型A的show路线,那么我应该如何加载模型B,C,D,E?

全部谢谢

2 个答案:

答案 0 :(得分:1)

比尔,我在Ember讨论论坛上回答了你的问题,但我也会在这里复制答案,这样问题就得到了解答。

  

我一直在使用Ember Data的旧版本,并且   几天前我刚刚更新到最新版本。因为这,   用一粒盐说我的话。 :)但我相信Ember Data   只是懒洋洋地加载记录/关系。所以你应该返回ID   对于B,C,D,E以及A的JSON,然后是Ember Data   一旦引用它们,就会自动加载它们的记录。

     编辑:差点忘了。您必须包含async:true选项   工作。

App.A = DS.Model.extend({
    b: DS.hasMany('b', { async: true });
});

答案 1 :(得分:0)

这可能比它的价值更麻烦...... Ember惯例是将A的关系ID加载到B,C,D,E。如果你在服务器上缓存你的响应,第二次这应该更快。

否则,您可以在仪表板页面上的请求之前更改ajaxPrefilter,以便在服务器中使用一些标题来更改其默认响应。

Ember.$.ajaxPrefilter(function(options, originalOptions, jqXHR) {
 jqXHR.setRequestHeader('no_relationship_ids', 'true');
});

然后在您的展示页面中,您在渲染之前总是必须.reload()模型(显然不包括上面的标题)。