Ember.js 如何处理Ember.Data中belongsTo关系的未找到错误

Ember.js 如何处理Ember.Data中belongsTo关系的未找到错误,ember.js,ember-data,Ember.js,Ember Data,我有一个带有自定义Ember.Data适配器的Ember应用程序。我有模型A和B以及它们之间的单向关系 App.A = DS.Model.extend({ b: DS.belongsTo('b') }); 问题是模型B可以在后端删除,而无需进行集成检查(这不是问题)。问题是,现在加载模型A时,它也尝试查找id=X的关系,但缺少记录。因此,Ember.Data会自动为id=X的模型B创建一个空记录,这会弄乱我的数据。当列出所有型号B时,也会显示此空记录 我当前检测到在适配器的extractS

我有一个带有自定义Ember.Data适配器的Ember应用程序。我有模型A和B以及它们之间的单向关系

App.A = DS.Model.extend({
  b: DS.belongsTo('b')
});
问题是模型B可以在后端删除,而无需进行集成检查(这不是问题)。问题是,现在加载模型A时,它也尝试查找id=X的关系,但缺少记录。因此,Ember.Data会自动为id=X的模型B创建一个空记录,这会弄乱我的数据。当列出所有型号B时,也会显示此空记录

我当前检测到在适配器的extractSingle方法中找不到记录,并抛出一个新的Ember.Error


如何正确处理这种情况?是否通过isEmpty、isLoading或其他属性手动筛选记录?似乎有一些未发现的事件,我应该抓住这个并做些什么吗?我是否应该将关系定义为异步,这有助于解决这种情况?

我不记得余烬数据的默认行为是它会自动查找
B
记录;如果您的服务器使用
null
b
属性返回
A
记录的有效负载,那么
A.get('b')
将简单地为null,您当然可以在整个应用程序中轻松地检查它。这种情况下,服务器返回的记录的b\u id属性为123,然后,余烬数据会自动尝试查找id为123的记录B,但没有这样的记录。现在,不再保留A.b null或未定义的成员数据,而是自动生成id=123的b记录,但所有其他字段均为空。这不是预期的行为,在这种情况下A.b应该为null或未定义。啊,我明白了。我认为这种行为(在您的服务器上)目前没有得到ember数据的很好支持。更好的方法是在
b
模型上有一个“归档”布尔值,您可以将其作为有效负载的一部分返回。这就是我目前在我的应用程序中对一些型号所做的,它们需要你描述的那种“软删除”。这似乎比弄乱ember数据的错误处理内部更可取,因为ember数据目前没有很多语义可供借鉴。即使服务器进行外键完整性检查,并且删除引用的记录时FK keys设置为null,也会出现这种情况。假设一个用户加载记录A(b_id=123),如我的示例所述,然后另一个用户删除记录b。现在,如果用户A想要访问记录b,那么同样的事情也会发生。对于异步关系,这是非常常见的场景。如果余烬数据现在用空数据自动创建记录B,那么这对我来说似乎是一个bug。我需要A.b.id为null而不是123,因为此记录已被删除。我将把这个问题写到Github,但也欢迎任何其他临时解决方案。