2016-07-29 4 views
0

Ich habe ein select Element gebunden mit ko und es zeigt Daten perfekt.Erhalten Wert von wählen in Knockout

<select name="assetTypeID" 
     class="form-control" 
     id="assetTypeID" 
     data-bind="options: $root.personalassettype_dd, 
        optionsValue: 'id', 
        optionsText: 'text', 
        optionsIncludeDestroyed: true, 
        value:typeid"> 
</select> 

Ich möchte den ausgewählten Wert dieses Dropdown in einer Spanne anzeigen. Was ich versuche, ist:

<span id="spnassetTypeID" data-bind="text: $root.personalassettype_dd.text"></span> 

Haben durch this Stack Overflow question gegangen, aber das hat nicht funktioniert, irgendwelche Ideen?

Ich bin der Antwort jetzt sehr nahe. Wenn ich schreibe:

<span id="spnassetTypeID" data-bind="text: $root.personalassettype_dd()[0].text"></span> 

funktioniert es für mich bei zeigt den Wert des Elements an der 0. Index wie es harcoded wird.

Aber wenn ich versuche, schreibe dies:

<span id="spnassetTypeID" data-bind="text: $root.personalassettype_dd()[typeid].text"></span> 

Es gibt mir diese Fehlermeldung:

Unable to parse bindings.
Message: TypeError: Unable to get property 'text' of undefined or null reference;
Bindings value: text: $root.personalassettype_dd()[typeid].....

So bedeutet es, dass irgendwie ist es nicht ‚typeid‘ bekommen, wenn ich es anstelle von Array war Index.

Hinweis: Ich habe auch versucht, Typid in Anführungszeichen übergeben, aber das hat nicht funktioniert.

+0

Haben Sie [diese Antwort unten] (http://stackoverflow.com/a/38651148/419956) schon überprüft? Es ist die richtige Lösung IMO. Du könntest diesen zweiten Ansatz zum Laufen bringen, wenn du dich wirklich anstrengst, aber das bedeutet, dass du gegen KO kämpfst und es nicht zu deinem Vorteil nutzt. – Jeroen

+0

Ich habe das versucht, aber es hat nicht funktioniert. Es entfernt auch die "Werte" aus den Optionen, die ich für eine andere Funktionalität benötige. – sam

+0

Dann würde es helfen, den Code Ihrer Frage in ein [mcve] zu ändern, das für Ihre Situation repräsentativ ist. Wenn Sie uns nicht sagen, können wir nicht wissen, was Sie brauchen, und * soweit der aktuelle Code * betroffen ist @ Adrian's Antwort ist wahrscheinlich die beste Lösung. – Jeroen

Antwort

2

Der Link der Post, die Sie gaben, hat eine korrekte Antwort.

Ihre Textbindung in spnassetTypeID sollte den Wert des Werts in Ihrem select Element haben. Entfernen Sie Ihre optionsValue Bindung.

Die Verwendung von optionsValue ist für knockout, um zu bestimmen, welche Eigenschaft des Objekts (Element von Ihrem personalassettype_dd) verwendet wird. Zum Beispiel, wenn ich die optionsValue zu text änderte, dann wird der Wert typeId der text des ausgewählten Objekts sein. Wenn ich die optionsValue entfernte, dann ist das gesamte ausgewählte Objekt der Wert typeId.

Ein kleines Beispiel mit Ihrem Markup finden Sie unter fiddle.

<select name="assetTypeID" class="form-control" id="assetTypeID" data-bind="options: $root.personalassettype_dd, optionsText: 'text', optionsIncludeDestroyed: true,value:typeid"></select> 
<span id="spnassetTypeID" data-bind="text: $root.typeid().text"></span> 
+1

Sicher, ich werde es aktualisieren. Vielen Dank. – Adrian

+0

Es hat nicht für mich funktioniert Überprüfen Sie mein Update über – sam

+0

Was hat nicht funktioniert? Obwohl, wenn Sie mit Ihrem Ansatz vom Update fortfahren wollen, liegt das Problem bei der 'typeid' nicht initialisiert mit einem Wert im Voraus, denke ich. 'this.typeid = ko.observable (0)', so dass es den ersten Wert des Dropdown-Menüs anfänglich hat. – Adrian