0
Knockout.jsは、MVVMを実装するのに最適なライブラリです。ドロップダウンの値がバインドされていないのはなぜですか?
以下の最小サンプルは、knockout.js
を使用してグリッドにバインドします。
ビュー
<div id="divDecision">
<div id="divDecisionBinding" data-bind="template: { name: 'tmplDecision' }">/div>
<script id="tmplDecision" type="text/x-jquery-tmpl">
<table id="tblDecision">
<thead>
<tr>
<th>Candidate</th>
<th>Decision</th>
</tr>
</thead>
<tbody data-bind="foreach:decisionList" id="tbList">
<tr>
<td data-bind="text: candidate"></td>
<td>
<select data-bind="attr: { id: 'cmbDecision' + ':' + $index(), name: 'cmbDecision' + ':' + $index()}, options: viewModelDecision.decisionLookup, value: 'decision', optionsText: 'decision_desc', optionsCaption: 'Please select'"></select>
</td>
</tr>
</tbody>
</table>
</script>
</div>
viewModelDecision(2人のメンバー:decisionLookupとdecisionList)
decisionLookup
0 : {decision: "N", decision_desc: "No need"}
1 : {decision: "A", decision_desc: "Approved"}
2 : {decision: "R", decision_desc: "Rejected"}
decisionList
0 : {candidate: "000000001", decision: "A" }
1 : {candidate: "000000002", decision: "N" }
スクリプト
var viewModelDecision;
//viewModelDecision gets loaded from a web service
viewModelDecision = result;
//Now the binding happens
ko.applyBindings(viewModelDecision, document.getElementById("divDecision"));
回の出力
000000001 Please select
000000002 Please select
調査結果
- フィールド
candidate
が正常にドロップダウンリストcmbDecision:X
の - オプションは、ドロップダウンリスト
cmbDecision:X
の値がバインドされていない - を正常にバインドされてバインドされています - キャプション "
Please select
"がデフォルトで選択されています。
質問ドロップダウンリストの値がデフォルトで選択されていないのはなぜ
?
私は、部分的にあなたが言っているのか理解しています。しかし、私のviewModelDecisionはWebサービスから来ています - (viewModelDecision = result)。これをもっと明確にするために質問を更新します。 VMでselectedDecisionを設定するにはどうすればよいですか? – Zesty
あなたの答えはoptionsValueの追加と、値の修正: 'decision'を変数に使っていました。私は観察可能な部分を理解することができませんでした。 this.selectedDecisionの設定方法について説明することができれば便利です。 – Zesty
観測値を新しい値で呼び出すことによって観測値を設定します。この値は、選択した項目が正しく更新されるように、リスト内のデシジョン・プロップの1つに対応する必要があります。例:this.selectedDecision(decisionLookup [0] .decision)最初のものを選択します。 optionsValueバインディングは必要ありません。 1つのプロパティではなく、オブジェクトへの実際の参照を格納することもできます。 – user3297291