2013-10-24 36 views
6

我正在使用knockoutjs綁定選擇列表。這裏是一個Sample ,我想獲得選定的選項文本,而不是選定的值。在淘汰賽中獲得選定的選項文本

如何使用knockoutjs獲取它?

<select id="projectMenu" name="projectMenu" data-bind=" 
     value: selectedProject, 
     options:  projectFilters, 
     optionsText: 'a', 
     optionsValue: 'b', 
     optionsCaption: '-- Select Project --' 
    "> 
    </select> 
<b>Selected Project:</b> <span data-bind="text: selectedProject"></span> 
+0

請提供一個代碼示例,不是簡單的一個環節。 – dokaspar

+1

可能重複? http://stackoverflow.com/questions/11112435/how-can-i-get-the-text-of-a-selected-item-from-a-knockout-observable –

回答

1

就我而言,它只是一個簡單的綁定是不可能的。但是,您可以輕鬆創建裏面選擇optionText基於optionValue

vm.selectedOption= ko.computed(function() { 
    for (var i = 0; i < this.projectFilters().length; i += 1) { 
     var data = this.projectFilters()[i]; 
     if (data.a === this.selectedProject()) { 
      return data.b; 
     } 
    } 
    return null; 
}, vm); 
+0

我不能這樣做,因爲我不想要迭代一個大集合,我在我的視圖中有很多選擇列表。所以會降低性能。 – Sudarshan

+3

@MotaChuha除非有非常大的集合應該可以工作 - 現代個人電腦速度相當快)。在拒絕此解決方案之前,我會建議進行性能測試 - 也許性能稍微降低是可以接受的。如果不是,你可能應該編寫自定義敲除綁定來實現要求。 –

+0

好的,但這將是我的最後一個選擇。 – Sudarshan

10

這樣做是爲了去除optionsValue結合的最簡單方法computedObservable。 如果您不確認optionsValue綁定,則整個項目將爲選定值。

<select id="projectMenu" name="projectMenu" data-bind=" 
     value: selectedProject, 
     options:  projectFilters, 
     optionsText: 'a',   
     optionsCaption: '-- Select Project --' 
    "> 
    </select> 
<b>Selected Project: 
<span data-bind="text: selectedProject() ? selectedProject().a : 'no selection '"></span> 

See fiddle

+0

小提琴鏈接不工作 – Sudarshan

+0

對我來說它的工作原理。你會得到什麼樣的錯誤? – Damien

+0

它正在爲訂閱事件而不是爲改變event.anyway好解決隊友。感謝你的工作。順便提琴對我來說工作得很好。 – Prageeth

1
vm.selectedCountryName = ko.computed(function() { 
     var text = ''; 
     ko.utils.arrayForEach(vm.countries(), function (item) { 
      if (item.CountryId == vm.selectedCountry()) { 
       text = item.CountryName; 
       return; 
      } 
     }); 
     return text; 
    });