我正在为Dojo选择下拉菜单设置默认值,即id =-999来自json对象。这工作正常,但在展开时单击选择框,默认值更改为第二个位置,id= 29设置为默认值(第一个位置)。此问题主要发生在Chrome浏览器中。附件是json对象和用户界面行为的图像。先谢了。
ss2ws0br1#
设置store时需要添加labelAttr,例如:
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,这也可以解决这个问题。
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,则存储中的项目将使用错误的条件进行存储,从而给出错误的顺序。
dijit.form._FormSelectWidget
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。
1条答案
按热度按时间ss2ws0br1#
设置
store
时需要添加labelAttr
,例如:参见此处:http://jsfiddle.net/k63h12ux/2/
如果你不希望标签被排序,添加
sortByLabel: false
,这也可以解决这个问题。参见此处:http://jsfiddle.net/z4w0bx9k/1/
此问题的原因与
dijit.form._FormSelectWidget
的以下行有关。如果未提供labelAttr
,并且将sortByLabel
的默认值设置为true
,则存储中的项目将使用错误的条件进行存储,从而给出错误的顺序。从
dijit.form._FormSelectWidget
文档中还可以看到:如果设置了
store
,则还必须设置labelAttr,除非store是旧式的dojo.data存储,而不是新的dojo/store。