2014-12-03 78 views
0

enter image description here Im设置Dojo选择下拉列表的默认值,即id = -999从json对象。 这工作正常,但在扩展默认值更改为第二个位置时,选择框单击时,id = 29被设置为默认(第一个位置)。 此问题主要发生在Chrome浏览器中。 附加的是json对象和UI行为的图像。Dojo选择下拉扩展更改默认值

在此先感谢。 enter image description here

enter image description here

enter image description here

+0

我认为你必须分享一些代码才能获得更多帮助。你在这个例子中看到了相同的行为吗? http://jsfiddle.net/froden/oqjym25f/ – Frode 2014-12-03 14:29:25

回答

1

您需要添加labelAttr设置store时,例如

new Select({ 
    store: new MemoryStore({ data: g_data(), getLabel: function(o) {return o.label;} }), 
    labelAttr: "label", 
    value: "-999", 
    onChange: function(v) { document.getElementById("output").innerHTML = "Selected " + v; } 
}).placeAt("container").startup(); 

在这里看到:http://jsfiddle.net/k63h12ux/2/

如果您不希望标签进行排序,添加sortByLabel: false。这也将解决这个问题。

new Select({ 
    store: new MemoryStore({ data: g_data(), getLabel: function(o) {return o.label;} }), 
    sortByLabel: false, 
    value: "-999", 
    onChange: function(v) { document.getElementById("output").innerHTML = "Selected " + v; } 
}).placeAt("container").startup(); 

在这里看到:http://jsfiddle.net/z4w0bx9k/1/

这个问题的原因是周围的dijit.form._FormSelectWidgetfollowing line。如果没有提供labelAttr且默认值sortByLabel设置为true,则来自商店的物品将使用错误的条件进行存储,因此会给出错误的顺序。

var labelAttr = this.labelAttr; 
items.sort(function(a, b){ 
    return a[labelAttr] > b[labelAttr] ? 1 : b[labelAttr] > a[labelAttr] ? -1 : 0; 
}); 

dijit.form._FormSelectWidget文档,它也说:

如果store设置,labelAttr必须设置也一样,除非店是一个老风格 dojo.data存储,而不是一个新的道场/商店。

+0

感谢您的答案,其实labelAttr:“标签”, 值:“-999”,sortByLabel:false,这三行代码修复了我的问题。 – user1516871 2014-12-09 05:10:27