为什么id属性仅添加到Memory store的后续对象中?

时间:2016-06-23 15:50:36

标签: dojo

在创建对象存储库时省略idProperty时,为什么添加到内存存储库的后续对象获取id属性,但是在创建内存存储库时使用的对象却没有?

例如

var employees = [{
    name: "Krishna",
    topic: "Sales"
}, {
    name: "Mohhamad",
    topic: "Sales"
}];

var employeeStore = new Memory({
    data: employees,

});

employeeStore.add({ name: "Joe", topic: "Marketing" });

我的数据包含以下对象

{
    name: "Krishna",
    topic: "Sales"
},
{
    name: "Mohhamad",
    topic: "Sales"
},
{
    id: 0.8244685191447396,
    name: "Joe",
    topic: "Marketing"
}

1 个答案:

答案 0 :(得分:1)

查看dojo/store/Memory.js您会注意到setData(最初执行以将原始数据放入商店的方法)不依赖于商店的put方法。
它只是循环遍历给定的对象并创建索引,期望idProperty在那里。 如果你的情况,因为你没有提供idProperty,我认为索引完全搞砸了。所有索引都将映射到undefined(参见dojo/store/Memory.js的第159行)。

但是,put方法是将{a}值添加到idProperty(如果缺少)。这就是你在问题中描述的内容。

作为一种解决方法,您可以:

  • 确保您为setData
  • 提供的每个对象都有一个ID
  • 使用空数组调用setData,然后遍历初始对象并对所有这些对象使用put