这是我的第二个Ember应用程序,以下问题是一个反复出现的主题。
我正在使用Ember js和Ember数据的Canary构建,并启用了查询参数。
假设我们有以下关系:
模型B,C,D,E是巨大的模型,资源很重,可用于渲染。所以一直加载它们并不是最佳的。
假设我的应用程序有一个允许快速浏览应用程序状态的仪表板,并且它侧重于模型A.我不需要显示B,C,D,E中的任何内容。所以JSON不会从example.com/api/a
端点返回关系ID数组。
如果用户点击模型A的show
路线,那么我应该如何加载模型B,C,D,E?
全部谢谢
答案 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()
模型(显然不包括上面的标题)。