Einzelne Auswahloptionen Bindung mit jQuery Validierung funktioniert nicht

8

Ich binde eine Liste von Objekten an eine select mit Knockout. Objektklasse kann beliebig viele Eigenschaften haben

%Vor%

Das funktioniert einwandfrei und ich kann viewModel.selectedCity().Name oder viewModel.selectedCity().Value zum Laden von untergeordneten Elementen verwenden.

Mein Problem ist die jQuery-Validierung. Wenn ich die Anweisung wie oben angegeben belasse, setzt jQuery den Fehler auch nach der Auswahl nicht zurück.

Ich habe es durch Angabe von optionsValue in der Bindung behoben, aber dann liefert selectedCity den skalaren Wert und nicht das gesamte Objekt. Irgendeine Idee, wie man das Objektverhalten erhält oder die Validierung anders macht?

%Vor%

Der Fehler bleibt dort, wenn optionsValue nicht angegeben ist:

Hier ist mein Object Watch auf selectedCity :

Hier ist eine Objektüberwachung in selectedCity , wenn optionsValue angegeben ist:

    
Pinakin Shah 19.07.2011, 07:42
quelle

4 Antworten

8

Das Problem besteht darin, dass die Elemente option ihren Wert auf "" setzen, wenn Objekte als Wert behandelt werden. Die jQuery-Validierung schlägt deshalb fehl. Sie könnten eine Binding- oder Wrapper-Bindung an die options -Bindung schreiben, die durchläuft, und sie nur auf einen Wert setzen, aber ich denke nicht, dass es vorzuziehen ist, diese Route zu gehen.

Eine vernünftige Option besteht darin, den Wert zu speichern und ein abhängiges Observable zu verwenden, um das aktuell ausgewählte Objekt darzustellen.

Es wäre wie:

%Vor%

Mit einer Bindung wie:

%Vor%

Beispiel hier: Ссылка

    
RP Niemeyer 20.07.2011, 21:22
quelle
5

Ganz einfache Lösung wäre, den Optionen optionsAfrerRender zur Optionsbindung hinzuzufügen. Angenommen, im Objekt 'selectedCity' gibt es ein Feld 'cityId', das Sie einem Optionswert zuweisen können. Überprüfen Sie anhand Ihres Beispiels die folgende Lösung:

%Vor%

Mit diesem Ansatz können Sie sowohl die Knockout-Optionen binden als auch die Jquery-Validierung durchführen.

    
Namnatur 02.10.2014 18:31
quelle
1

Die obige Antwort funktioniert mit einem Vorbehalt. Die erste Auswahlwertgrenze ("- Select the city--") ist nicht definiert und verursacht einen Fehler.

Wenn Sie den Code ändern, um damit umzugehen, wird es funktionieren.

%Vor%

Hinweis: Ich habe alles aus dem ViewModel entfernt, mit Ausnahme der Methode setOptionValue.

%Vor%

    
Robert Swilley 14.05.2016 15:06
quelle
0

Um Roberts Antwort zu erweitern, können wir die Hilfsfunktion für jedes Dropdown im Ansichtsmodell verwenden, unabhängig von der Kontextdatenbindung, indem dem Benutzer ermöglicht wird, eine Zeichenfolge für die richtige Eigenschaft einzugeben:

JS

%Vor%

HTML

%Vor%     
Ben Sewards 06.09.2016 14:15
quelle