2013-10-24 17 views
6

Ich verwende knockoutjs, um eine Auswahlliste zu binden. Hier ist ein Sample , Ich möchte ausgewählten Optionstext anstelle von ausgewählten Wert erhalten.Get ausgewählten Optionstext in Knockout

Wie bekomme ich es mit 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

bitte ein Codebeispiel, nicht einfach einen Link. – dokaspar

+1

Mögliches Duplikat? http://stackoverflow.com/questions/11112435/how-can-i-get-the-text-of-a-selected-item-from-a-knockout-observable –

Antwort

1

Soweit es mich betrifft, ist es nicht mit nur einer einfachen Bindung möglich. Aber Sie können leicht computedObservable schaffen, die optionText auf Option Basis wählen

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

Ich kann das nicht tun, weil ich nicht will eine große Sammlung zu iterieren, und ich habe viele Auswahlliste in meiner Ansicht. damit wird die Leistung reduziert. – Sudarshan

+3

@MotaChuha Es sei denn, es gibt sehr große Sammlungen, die sollten OK funktionieren - moderne PCs sind ziemlich schnell;). Und ich würde empfehlen, Leistungstests durchzuführen, bevor diese Lösung abgelehnt wird - vielleicht wäre eine etwas langsamere Leistung akzeptabel. Wenn nicht, sollten Sie wahrscheinlich eine benutzerdefinierte Knockout-Bindung schreiben, um die Anforderung zu erfüllen. –

+0

ok, aber das wird meine letzte Option sein. – Sudarshan

10

Der einfachste Weg, es zu tun ist, die optionsValue Bindung zu entfernen. Wenn Sie die Bindung optionsValue nicht festlegen, wird das gesamte Objekt als Wert ausgewählt.

<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

fiddle link funktioniert nicht – Sudarshan

+0

Für mich funktioniert es. Was für einen Fehler hast du? – Damien

+0

Es funktioniert für die Subscribe-Veranstaltung nicht für die Änderung event.anyway gute Lösung Mate. schätze deine Arbeit. Übrigens funktioniert Geige gut für mich. – 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; 
    }); 
Verwandte Themen