Dojo选择下拉展开更改默认值

时间:2014-12-03 13:55:00

标签: dojo dropdownbox

enter image description here我设置了Dojo的默认值,从json对象中选择下拉,即id = -999。 这样可以正常工作,但是当展开默认值时,单击选择框会更改为第二个位置,而id = 29则设置为默认值(第一个位置)。 此问题主要发生在Chrome浏览器中。 附上了json对象和ui行为的图像。

提前致谢。 enter image description here

enter image description here

enter image description here

1 个答案:

答案 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。