我和json一起使用了dojo组合框。 我有错误:列表中的项目有标识符:[id]。价值相撞:[48] 如果我看看我的原始json,我只有两个id为41和48的对象 但是当我查看我的ItemFileReadStore时,我有四个对象,其中一个是id = 41的对象,另外三个是id = 48的相同重复对象
该方法用于ItemFileReadStore:
var store = new dojo.data.ItemFileReadStore( { data: {
identifier: "id",
items: data
}});
console.log(store);
var filteringSelect = new dijit.form.ComboBox({
store: store,
searchAttr: "nafn"
},
"nafn");
可能是问题的根源是什么?
答案 0 :(得分:2)
我在您的代码中发现了某些错误。
1)dojo.data.ItemFileReadStore期望数据采用某种格式,您缺少该格式。 格式将是这样的。
var storeData = {identifier : 'uniqueIdOfEachItem', label : 'displayName', items : [
{uniqueIdOfEachItem:1,displayName:'somename'},
{uniqueIdOfEachItem:2,displayName:'somename2'}
]}
var store = new dojo.data.ItemFileReadStore({data: storeData })
var filteringSelect = new dijit.form.ComboBox({
store: store ,
searchAttr: "displayName"
},
"id_of_element_in_html_where_your_combo_will_sit");
2)ComboBox中的searchAttr应该是商店项目的道具之一(此处为uniqueIdOfEachItem或displayName)。
3)请确保商店中每件商品的标识符(此处为uniqueIdOfEachItem)是唯一的,如果它不唯一,那么组合框将不起作用,抛出类似于您提到的错误。
答案 1 :(得分:1)
我确实纠正了我的代码。我还发现问题是我的实体有两个自引用字段,因此可以多次找到相同的id。
在我的情况下, personn 有两个父母,母亲和父亲,他们也是他们身份的人。
看起来像是:
[{id:'1',name:'john',father:{id:'2',name:'gils'},mother:{id:'3',name:'loa'}}]
[{id:'1',name:'nora',father:{id:'2',name:'gils'},mother:{id:'3',name:'loa'}}]
我发生了冲突,因为id [2]发生了冲突。
我不得不删除两个母亲和父亲,这解决了问题。