Ember data store.find()在使用无效ID调用时创建空项

时间:2014-09-09 00:11:53

标签: ember.js ember-data

我有一个绑定到DS.RecordArray支持的模型的列表,就像使用Ember数据样本js小提琴一样。当我使用有效ID调用this.store.find({id})时,一切都按预期工作。但是,当我使用不存在的id或空字符串调用this.store.find({id})时,会向DS.RecordArray添加一个空模型,该模型会反映在我的绑定列表中。

我在JSFiddle here中创建了此行为的示例。我的示例有两个按钮来展示两种情况:

  1. 调用find('post', 14),其中14表示不存在的ID。在这种情况下,按此按钮一次将空白元素添加到列表中,随后的按下不执行任何操作。
  2. 调用find('post', '')传递空字符串而不是id。在这种情况下,每次按下此按钮,都会在列表中添加一个空白元素。
  3. 预计会出现这种情况吗?如果是这样,那么避免列表中这些空元素的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

store.find(“type”,id)将委托给store.findById(type,id),它调用store.recordForId(type,id)。如果你检查了recordForId()的函数体,你会看到它检查了typeMap的id,如果它不存在,则调用buildRecord(type,id),它会创建该类型的记录并添加它到typeMap。

这是预期的行为,因为它显然是打算这样做,但是否可以争论是否是一个好主意。

对于我的应用程序来说,这不是一个好主意,所以我将id.findById覆盖到id为真的id上的Ember.assert(),因为我从来没有尝试找到带有0,null或未定义id的记录