Вам нужно добавить 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
. Если 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.
person
Alex Cheng
schedule
05.12.2014