我设置了Dojo的默认值,从json对象中选择下拉,即id = -999。 这样可以正常工作,但是当展开默认值时,单击选择框会更改为第二个位置,而id = 29则设置为默认值(第一个位置)。 此问题主要发生在Chrome浏览器中。 附上了json对象和ui行为的图像。
提前致谢。
答案 0 :(得分: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._FormSelectWidget
following 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
doc,它也说:
如果设置了
store
,则必须设置labelAttr,除非store是旧式的 dojo.data存储而不是新的dojo / store。