In meinem Ansichtsmodell habe ich einen IsMale-Wert mit dem Wert true oder false.
In meiner Benutzeroberfläche möchte ich es an die folgenden Optionsfelder binden:
<label>Male
<input type="radio" name="IsMale" value="true" data-bind="checked:IsMale"/>
</label>
<label>Female
<input type="radio" name="IsMale" value="false" data-bind="checked:IsMale"/>
</label>
Ich denke, das Problem ist, checked
dass eine Zeichenfolge "true" / "false" erwartet wird. Meine Frage ist also, wie kann ich diese 2-Wege-Bindung mit dieser Benutzeroberfläche und diesem Modell erhalten?
Antworten:
Eine Möglichkeit besteht darin, eine beschreibbare berechnete beobachtbare Größe zu verwenden .
In diesem Fall denke ich, dass eine gute Option darin besteht, das beschreibbare berechnete Observable zu einem "Sub-Observable" Ihres
IsMale
Observable zu machen. Ihr Ansichtsmodell würde folgendermaßen aussehen:Sie würden es in Ihrer Benutzeroberfläche wie folgt binden:
Beispiel: http://jsfiddle.net/rniemeyer/Pjdse/
quelle
Ich weiß, dass dies ein alter Thread ist, aber ich hatte das gleiche Problem und fand eine viel bessere Lösung heraus, die wahrscheinlich zum Knockout hinzugefügt wurde, nachdem diese Frage offiziell beantwortet wurde, also überlasse ich es einfach Leuten mit dem gleichen Problem.
Derzeit sind keine Extender, benutzerdefinierten Bindungshandler oder berechneten Daten erforderlich. Geben Sie einfach eine "checkedValue" -Option an, die anstelle des HTML-Attributs "value" verwendet wird. Damit können Sie einen beliebigen Javascript-Wert übergeben.
Oder:
quelle
value
Bindung und dann diechecked
Bindung (in dieser Reihenfolge) verwenden konnte, aber mit 3.0 musste ich diecheckedValue
Bindung anstelle dervalue
Bindung verwenden. (2) Pre-v3.0 war wählerisch, wenn es darum ging, dass dievalue
Bindung der Bindung vorausgehtchecked
, damit sie ordnungsgemäß funktioniert. Daher habe ich das Gefühl, dass die Dinge in v3.0 in allen Szenarien möglicherweise auch besser funktionieren, wenn Sie diecheckedValue
Bindung vor diechecked
Bindung stellen, z Sie werden in den Dokumenten angezeigt .checked
Setter (oder möglicherweise etwas, das davon abhängt) einen FehlerDas funktioniert bei mir:
http://jsfiddle.net/zrBuL/291/
quelle
vm.IsMale(!!vm.+IsMale());
bevor Sie json serialisieren, um es an den Server zu senden (falls die Serverseite nicht richtig damit umgehen kann)Verwenden Sie diesen Ordner, anstatt dumme ko-berechnete Observablen zu erstellen.
Beispiel:
quelle
Sobald Sie herausgefunden haben, dass die anfängliche Übereinstimmung für das Optionsfeld nur mit einer Zeichenfolge übereinstimmen und den Wert auf eine Zeichenfolge setzen möchte, müssen Sie lediglich Ihren Anfangswert in eine Zeichenfolge konvertieren. Ich musste dies mit Int-Werten bekämpfen.
Nachdem Sie Ihre Observablen eingerichtet haben, konvertieren Sie den Wert in einen String, und KO wird von dort aus seine Magie entfalten. Wenn Sie einzelne Zeilen zuordnen, führen Sie die Konvertierung in diesen Zeilen durch.
Im Beispielcode verwende ich Json, um das gesamte Modell in einem einzigen Befehl abzubilden. Lassen Sie dann Razor den Wert zwischen den Anführungszeichen für die Konvertierung einfügen.
Ich verwende während der Entwicklung unten auf meiner Webseite ein "Alles auf den Bildschirm werfen".
Hier sind die Datenwerte, Vorher
und danach
In meinem Projekt musste ich Bools nicht konvertieren, da ich ein Kontrollkästchen verwenden kann, das nicht die gleiche Frustration aufweist.
quelle
Warum nicht einfach wahr und falsch statt 1 und 0?
quelle
Sie können auch einen Extender verwenden, damit Sie ihn problemlos für weitere Observable wiederverwenden können:
Dann benutze es so:
Der angegebene Parameter
boolForEditing
gibt an, ob der Wert null sein darf.Siehe http://jsfiddle.net/G8qs9/1/
quelle
Nachdem Sie vor 3.0 viel nach älteren Versionen von Knockout gesucht haben, gibt es möglicherweise zwei beste Optionen
Erstellen Sie einen Knockout-Extender wie
Um den Extender für Ihr Modell zu verwenden, gehen Sie wie folgt vor:
Quelle: http://www.timlabonne.com/2013/02/building-a-knockout-js-extender-for-boolean-values/
quelle