Ember数据延迟加载vs嵌入?

时间:2014-12-19 09:45:26

标签: ember.js ember-data

我的教育余烬应用程序中有以下模型。

App.Exam=DS.Model.extend({
    name: DS.attr('string'),
    subjects: DS.hasMany('subject')
});

App.Subject=DS.Model.extend({
    name: DS.attr('string'),
    exam: DS.belongsTo('exam')
});

App.SubjectCourse=DS.Model.extend({
    subject: DS.belongsTo('subject'),
    course: DS.belongsTo('course')
});

App.Course=DS.Model.extend({
    name: DS.attr('string'),

});

每个exam都有很多科目。
每个subject都属于考试 还有另一个表SubjectCourse,其中包含哪个课程属于哪个主题的信息。由于一门课程可以属于多个科目,我使用过此表。

现在,当我从API请求数据时,我应该如何加载相关数据?

在我的应用中,我希望用户能够选择考试并查看属于该考试的所有课程,然后按主题搜索/过滤。

我也可以通过使用嵌入式json数据来解决这个问题。但这是做这件事的方式吗?或者在这种情况下延迟加载相关数据?

1 个答案:

答案 0 :(得分:3)

如何侧载数据:

如果您希望辅助加载对象,则需要添加以下选项:

App.Exam=DS.Model.extend({
    name: DS.attr('string'),
    subjects: DS.hasMany('subject', {async: true})
});

现在,ember希望您的API发送类似于此的JSON:

{"name" => "examName", "subjects" => [1, 2, 3] }其中1, 2, 3表示三个主题的对象ID。您的考试记录现在将存在于您的余烬商店内,一旦您尝试访问其主题,商店将使用其ID发送特定主题的GET请求并相应地更新考试记录。

何时侧载数据:

当您确信ember商店已经知道该对象时,侧面加载数据是有意义的。例如,如果许多考试共享某个科目的子集,那么在加载侧边时,您只需要发送一次这些科目,只要稍后加载考试的主题2,该博主将只获得该科目。来自商店的id 2,而不是发送另一个请求。

何时不加载数据:

另一方面,如果考试没有共享任何共同科目,那么每次你需要考试时,你都会有效地发送多个请求(一个用于考试本身,一个用于每个科目)。这可能会产生大量请求并降低您的应用程序速度。因此,当您获取记录并且您知道需要其依赖记录时,嵌入它们以保存网络请求更有意义。

相关问题