展开时的Dojo选择下拉菜单更改默认值

afdcj2ne  于 2022-12-16  发布在  Dojo
关注(0)|答案(1)|浏览(227)

我正在为Dojo选择下拉菜单设置默认值,即id =-999来自json对象。这工作正常,但在展开时单击选择框,默认值更改为第二个位置,id= 29设置为默认值(第一个位置)。此问题主要发生在Chrome浏览器中。附件是json对象和用户界面行为的图像。
先谢了。

ss2ws0br

ss2ws0br1#

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

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的以下行有关。如果未提供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,除非store是旧式的dojo.data存储,而不是新的dojo/store。

相关问题