4

私は dojo 1.8.2 を使用していますが、これが私の問題です (これこの質問を見たことがありますが、役に立ちません)。

私のJSコードは、サーバーからJSON形式のデータを受け取ります。それで、次のオプションを動的に作成しますdijit.form.select

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}
]
...

なぜそれが起こるのかわかりません、手がかりはありますか?

4

1 に答える 1

8

問題のソースコードdijit/form/_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

実際に見てみましょう: http://jsfiddle.net/phusick/BfTXC/

于 2012-12-19T10:25:16.700 に答える