dojo和动态添加选项到dijit.form.select
我使用dojo 1.8.2,这里是我的问题(我已经看到并提出了问题,但它们没有帮助): 我的dojo和动态添加选项到dijit.form.select,dojo,dijit.form,Dojo,Dijit.form,我使用dojo 1.8.2,这里是我的问题(我已经看到并提出了问题,但它们没有帮助): 我的JS代码从服务器接收JSON格式的一些数据。这样,我就可以动态地为dijit.form创建一些选项 var select = registry.byId('zgloszenieDoFirmyEdycja'); for (var uzytkownik in dane.uzytkownicy){ var idUzytkownika = dane.uzytkownicy[uzytkownik]['_id
JS
代码从服务器接收JSON
格式的一些数据。这样,我就可以动态地为dijit.form创建一些选项
var select = registry.byId('zgloszenieDoFirmyEdycja');
for (var uzytkownik in dane.uzytkownicy){
var idUzytkownika = dane.uzytkownicy[uzytkownik]['_id']['$oid'];
var imie = dane.uzytkownicy[uzytkownik].imie;
var nazwisko = dane.uzytkownicy[uzytkownik].nazwisko;
var wybrany = (idUzytkownika == id);
var opcja = {};
opcja.label = imie + ' ' + nazwisko;
opcja.value = idUzytkownika;
opcja.selected = wybrany;
console.log(wybrany);
console.log(idUzytkownika + ' | ' + imie + ' ' + nazwisko);
console.log(opcja);
select.addOption(opcja);
/*select.addOption({
label: imie + ' ' + nazwisko,
value: idUzytkownika,
selected: wybrany
});*/
}
这是我的控制台输出:
false
5077d2a1e4b0f5734a9850a1 | zero zero
Object { label="zero zero", value="5077d2a1e4b0f5734a9850a1", selected=false}
true
50c0776f096aa0e726d221a3 | raz raz
Object { label="raz raz", value="50c0776f096aa0e726d221a3", selected=true}
false
50d019c3096aa862c6898cdb | dwa dwa
Object { label="dwa dwa", value="50d019c3096aa862c6898cdb", selected=false}
但是在更新了dijit.form.select
之后,selected
参数不知怎么搞混了,并且设置为true的不是我设置它的选项,而是第一个选项:
console.log(select);
...
Object[Object { label="zero zero", value="5077d2a1e4b0f5734a9850a1", selected=true},
Object { label="raz raz", value="50c0776f096aa0e726d221a3", selected=false},
Object { label="dwa dwa", value="50d019c3096aa862c6898cdb", selected=false}
]
...
我不明白为什么会发生这种情况,有什么线索吗?查看dijit/form/\u FormSelectWidget的源代码该问题是由以下事实引起的:如果没有选择任何选项,那么默认情况下会选择第一个选项。添加第一个选项时,此条件已满足,并且第一个选项已被选中 解决方法:一次将所有选项添加为一个数组:
var select = registry.byId("select1");
option1 = { value: "o1", label: "option 1", selected: false };
option2 = { value: "o2", label: "option 2", selected: true };
select.addOption([option1, option2]); // add all options at once as an array
在行动中看到它: