2013-05-07 12 views
7

は、通常、私はこのようにノックアウトでそれをバインドし、選択したオブジェクトを持っていません。あなたは代わりにそのIDを持っています。 この2つの要件をマージするには:アイテムのIDとアイテム自体の両方にバインドしますか?選択されたオプションイドと値

は今のところ私は通常このようになり、選択した項目、取得するために観測可能computedを使用します。私は、カスタム関数を使用して値ゲッターをラップしようとした

self.dataSelectedCO = ko.computed(function() { 
    for (var i = 0; i < self.data().length; ++i) 
     if (self.data()[i].Id() == self.dataSelectedId()) 
      return self.data()[i]; 
}); 

をそれはすべての要素の選択の変更を呼ばれていますこのアプローチを使用する利点はありません。 Here 's jsfiddle。

答えて

7

optionsValueパラメータを削除します。選択した値はIdの代わりに「選択した項目」になります。

更新されたコードは次のようになります。

<select 
    data-bind=" 
    options: data, 
    optionsText: 'Name', 
    optionsCaption: 'Select ...', 
    value: dataSelectedItem" ></select> 

dataSelectedItemは今、選択した項目を持つことになります。

商品をお持ちの場合は、 dataSelectedItem().Id

+0

このようにすることはできません。選択したIDに追加の非表示フィールドを追加しない限り、このSELECTをサーバーに送信するフォームに配置できないためです。しかし、IDにバインドされた隠されたフィールドを使用すると、それが作成されます。 – SOReader

+0

IDをSELECTの値として使用するには、選択したアイテムに対して計算されたobservableを使用することは非常に良いアプローチです。 – ManojRK

関連する問題