19

同様の質問:要素の初期値を選択します

select要素の初期値の設定に問題があります。基本的に、ドロップダウンリストに入力するためにサーバーから受信するシードデータのリストがあり、選択した値がエンティティから選択する必要があるものを表すようにします。

データモデルの選択された値はシードデータのオブジェクト参照と等しくないため、何も選択されていません。

現在、私は各エンティティをループして、正しい選択された値を見つけ、シードデータと同等の値に設定しているので、Knockoutはそれを接続する方法を知っています。

これよりもエレガントな解決策はありますか?簡単な例を詳細にいじりました... http://jsfiddle.net/hbrYM/14/

4

1 に答える 1

35

正しく推測したように、selectedValue参照は一致しないため、KOはそのアイテムを選択しません。これを機能させる方法は、選択した値で複合オブジェクトを保存せず、代わりにIDを選択することです。これは、プリミティブ型の等式が成功し、正しい値が選択されるためです。

http://jsfiddle.net/VLTFB/3/

オプションバインディングでoptionsValueオプションを使用する必要があります(それが理にかなっている場合:)

<select data-bind="options: seedData,
                    optionsText: 'firstName',
                    optionsValue: 'ID',
                    value: data.selectedValue">

編集

説明したように、計算された(テストされていない)正しいアイテムを再選択できます。

vm.currentlySelected = ko.computed(function () { 
   for (var i = 0; i < this.seedData().length; i += 1) {
       var data = this.seedData()[i];
       if (data.ID === this.selectedValue()) {
           return data;
       }
   }
   return null;
}, vm);

お役に立てれば。

于 2012-05-10T23:40:39.877 に答える