Ember 数据在内存中创建无关记录



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

// 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 数组中有一个额外的记录。

知道为什么余烬数据在内存中创建额外的记录以及我如何阻止它这样做吗? 谢谢

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

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

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

最新更新