2013-05-07 40 views
7

通常,當我有一個選擇列表我淘汰賽結合這樣的:選擇的選項Id和值

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

但是,有這樣的結合一個問題:你沒有選擇的對象。你有它的ID。 如何合併這兩個要求:綁定到項目的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]; 
}); 

我已經嘗試使用自定義函數來包裝值的getter但它要求每一個元素時,選擇更改,所以使用這種方法沒有任何好處。 Here是一個jsfiddle。

回答

7

刪除optionsValue參數。然後,選定的值將是「選定的項目」而不是Id

更新的代碼將是:

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

dataSelectedItem現在將有選擇的項目。

一旦你有物品。您可以從對象本身獲得Id,如dataSelectedItem().Id

+0

我不能這樣做,因爲那樣我就不能將這個SELECT放在發送到服務器的表單中,除非我爲所選ID添加額外的隱藏字段。但是使用帶有ID綁定的隱藏字段就可以了。 – SOReader 2013-05-07 14:08:19

+0

如果您希望將Id作爲SELECT的值,那麼對所選項目使用計算可觀察值是非常好的方法。 – ManojRK 2013-05-08 06:32:47