Ember-data在内存中创建无关的记录

时间:2017-05-10 12:17:21

标签: ember-data

我有一个多对多的关系表,来自.Net WebAPI的有效负载(附加字段),我已经用ember-data建模了。当我将记录添加到此表/关系中时,ember正在创建一个保存在内存中的附加记录,直到用户执行浏览器页面刷新。我的模特是:

// student.js
export default DS.Model.extend({
    name: DS.attr('string'),
    studentsClasses: DS.hasMany('student-class')
})

// class.js
export default DS.Model.extend({
    desc: DS.attr('string'),
    studentsClasses: DS.hasMany('student-class')
})

// student-class
export default DS.Model.extend({
    studentId: DS.attr('string'),
    student: DS.belongsTo('student'),
    class: DS.belongsTo('class'),
    grade: DS.attr('number')  // payload
})

以下是我用来创建和添加多对多记录的代码。

let newRecord = this.get('store').createRecord('student-class');
newRecord.studentId = 1;
newRecord.grade = 3;
class.get('studentsClasses').pushObject(newRecord);

新记录被创建并添加,屏幕上的所有内容都很好看,直到我回到同一页面并且class.studentClasses数组中有一条额外的记录。

知道为什么ember-data会在内存中创建额外的记录以及如何阻止它做到这一点呢? 感谢

1 个答案:

答案 0 :(得分:1)

正如你所说,ember-data将记录保存在内存中。而且你必须记住,ember-data不会自己删除那些记录。如果具有相同的id属性,它只能由您自己从内存中删除,页面刷新或替换为新的有效负载。您可以通过使用ember调试插件为chrome和firefox等浏览器观察该行为。

在您的情况下,您已store.createRecord()创建了一条新记录。在这一刻,它已经将这条记录添加到你的记忆中了,它被推到了你的班级记录中。如果你没有成功保存这些模型,它将保持一个名为“脏”的状态,如果你从未清理你的商店内存(使用类似store.unloadRecord()的东西有一些副作用,或删除这个未保存的新记录从您的相关模型中),下次使用store.findRecord()查找记录时,无法强制记录重新加载store.findRecord('class', 1, {reload: true}),它将使用内存中的现有数据作为优先级。

所以我的建议是在进入这个类页面时强制重新加载这个类模型。