我有一个绑定到DS.RecordArray
支持的模型的列表,就像使用Ember数据样本js小提琴一样。当我使用有效ID调用this.store.find({id}
)时,一切都按预期工作。但是,当我使用不存在的id或空字符串调用this.store.find({id})
时,会向DS.RecordArray
添加一个空模型,该模型会反映在我的绑定列表中。
我在JSFiddle here中创建了此行为的示例。我的示例有两个按钮来展示两种情况:
find('post', 14)
,其中14表示不存在的ID。在这种情况下,按此按钮一次将空白元素添加到列表中,随后的按下不执行任何操作。find('post', '')
传递空字符串而不是id。在这种情况下,每次按下此按钮,都会在列表中添加一个空白元素。预计会出现这种情况吗?如果是这样,那么避免列表中这些空元素的最佳方法是什么?
答案 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的记录