2011-05-23 25 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]。

我不得不刪除兩個領域的母親和父親,並解決了這個問題。