组合框与价值相撞

时间:2011-05-23 14:42:54

标签: json dojo

我和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");

可能是问题的根源是什么?

2 个答案:

答案 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]发生了冲突。

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