オプションのバインディング:選択リストはバインドされたオブジェクトの値を反映しません

私は、jQueryテンプレートで使用されている選択リストでオプションのバインディングを使用しています。


テンプレートは、複数の電子メールアドレスに対してノックアウトforeachを使用して呼び出されます。

EmailTypesはemailtypeオブジェクトのリストです 電子メールオブジェクトは、電子メールアドレスの文字列値を含むValueプロパティ、Guid IDを含むIdプロパティ、およびemailtypeオブジェクトを含む電子メールタイププロパティで構成されます。

emailtypeオブジェクトは、電子メールタイプの名前とGUID IDを含むValueプロパティで構成されます。

ドロップダウンには利用可能な電子メールの種類が正しく入力されていますが、ドロップダウンでは適切な項目は選択されません。バインドされたオブジェクトの値は反映されません。

EDIT: The template with the showed select line is getting called by this: tbody data-bind="template: { name: 'emailTemplate', foreach: contactsViewModel.selectedContactEmails }">

selectedContactEmailsは、電子メールオブジェクトで埋められたobservableArrayです.Jsonでは次のようになります。

{"EmailType":{"Value":"Home","Id":"191e8a64-8110-493c-b443-3063ff3a852a"},"ParentId":"191e8a64-8110-493c-b443-3063ff3a852c","Parent":null,"Value":"[email protected]","Id":"a7aae8fd-6ca3-49ae-b529-124d37a148ca"}

これらのオブジェクトのプロパティは、マッピングプラグインを使用してオブザーバブルに変換されます。

emailTypesは、EmailTypeオブジェクトで満たされたobservableArrayです。

{"Value":"Home","Id":"191e8a64-8110-493c-b443-3063ff3a852a"}
4
ビューモデルはかなり大きいので、重要なオブザーバブルとオブジェクト構造について概説しました。あなたが手伝ってくれることを願います。
追加された 著者 RolandG,
View Modelを表示できますか?
追加された 著者 neebz,

2 答え

ドロップダウンでは、バインドされている属性がわからないため、ドロップダウンでは境界値が選択されません。データバインディングで selectedOptions 属性を指定する必要があります。

options 属性は、それが保持する配列についてのドロップダウンを指示します。

optionsText 属性は、各配列項目に対してどのプロパティを使用して表示するかを示します。

optionsValue 属性は、どの値がオプション値に使用されているかをドロップダウンに伝えます。

どのような値がバインドされているのか、ドロップダウンリストはどのようにしてわかりますか?

Use selected options

8
追加された
私はこの答えに従っているかどうかはわかりません、selectedOptionsは複数選択の場合に使用されます。私のケースはこの質問に似ていますが、選択できる値は1つだけです....なぜselectedOptionsが必要なのですか?
追加された 著者 sarsnake,
ありがとう。私のドロップダウンでは、ユーザーは1つの値を選択する必要があります。私が理解しているドキュメントからは、 "selectedOptions"ではなく "value"を使用する必要があります。 selectedOptionsを試しましたが、動作しません。
追加された 著者 RolandG,
この例では選択リストは表示されません。
追加された 著者 RolandG,
:-)うん、それは動作します。しかし、なぜ私はviewModelをこれで置き換えてもうまくいきません:var eagle = {Email Type:ko.observable({"Value": "School"、 "Id": "491e8a64-8110-493c-b44‌ 3- 3063ff3a852a "})}};
追加された 著者 RolandG,
追加された 著者 RolandG,
ああ..素晴らしい提案。今パズルの最後の部分について:あなたの例では、あなたはviewmodelプロパティにバインドしています。テンプレートをレンダリングする観測可能な配列内の正しいオブジェクトにバインドするようにします。
追加された 著者 RolandG,
わかった。