2

http://jsfiddle.net/E2AMX/には、問題の正確なデモンストレーションがあります。つまり、同じページに複数の選択ボックスがあります。選択ボックスのすべてのオプションは、指定された形式になっています。

<option value="#id_num">StringVal</option>

そして、選択ボックスに関して分離されていないid_numsのobservableArray(たとえばidlist)が1つあります。例えば、

idlist = ko.observableArray([1,2,3,4]);

選択ボックスは次のとおりです

<select name="first" data-bind="selectedOptions: idlist">
    ...
    <option value="2">Blah</option>
    <option value="3">Blah</option>
    ...
</select>

<select name="second" data-bind="selectedOptions: idlist">
    ...
    <option value="1">Blah</option>
    ...
</select>

<select name="third" data-bind="selectedOptions: idlist">
    ...
    <option value="4">Blah</option>
    ...
</select>

私の問題は、選択ボックスから1つのオプションを選択すると、他の選択ボックスが初期状態に戻ることです。これはselectedOptionsに直接関連しています。これは、selectedOptionsディレクティブを削除しても、この問題は発生しないためです。

どんな提案でも大歓迎です。

ありがとう。

4

1 に答える 1

2

バインディングは、複数選択が有効になっselectedOptionsている単一のタグで使用することを目的としています。<select>選択したオプションボックスに各アイテムの配列が保持されます。

現在の動作が表示される理由は、ドロップダウンの1つから単一の値を選択すると、selectedOptionsバインディングがすぐに起動するためです。ロジックは次のようになります。

  1. ターゲット<select>の火災に関する更新。
  2. <option>バインディングは、基になる監視可能な配列から値を抽出して更新します。
  3. 値が変更されたため、監視可能な配列が更新を起動します。
  4. セカンダリドロップダウンは更新に応答し、配列の内容に基づいて選択した値を更新します。
  5. <option>タグのセットに値が存在しないため、値はクリアされます。

これが、この動作が見られる理由です。選択したすべてのオプションからコンポジットを収集する場合は、新しいカスタムバインディングを作成するか、<select>バインドするそれぞれに個別の配列を作成する必要があります。

于 2012-08-26T23:34:24.890 に答える