2011-05-23 67 views
1

我与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

无法看到您显示的代码有任何问题..您可能还想发布'data'的内容,或者更多的代码(如果有的话)。 – Frode 2011-05-23 18:29:39

回答

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)searchAttr在组合框应该是商店商品(这里uniqueIdOfEachItem或显示名)的道具之一。 3)请确保商店中每个商品的标识符(这里是uniqueIdOfEachItem)是唯一的,如果它不是唯一的,那么组合框将不起作用,抛出类似于你提到的错误。

1

我确实纠正了我的代码。我还发现问题是我的实体有两个自引用字段,因此可以多次找到相同的id。

在我的情况下,personn有两个父母,母亲父亲这也personn与他们的ID。

它看起来是这样的:

[{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]。

我不得不删除两个领域的母亲和父亲,并解决了这个问题。