J'ai 2 valeurs que j'obtiens des serveurs A et B. Je ne peux avoir qu'une seule vraie à la fois.
Encore une fois, ce dont j'ai besoin, c'est d'une des radios à vérifier à la fois, donc une seule vraie valeur.
var viewModel = {
radioSelectedOptionValue: ko.observable("false"),
A: ko.observable("false"),
B: ko.observable("false")
};
ko.applyBindings(viewModel);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/2.1.0/knockout-min.js"></script>
<div class='liveExample'>
<h3>Radio View model</h3>
<table>
<tr>
<td class="label">Radio buttons:</td>
<td>
<label><input name="Test" type="radio" value="True" data-bind="checked: A" />Alpha</label>
<label><input name="Test" type="radio" value="True" data-bind="checked: B" />Beta</label>
</td>
</tr>
</table>
A-<span data-bind="text: A"></span>
B-<span data-bind="text: B"></span>
</div>
La liaison checked
fonctionne différemment pour les boutons radio et les cases à cocher:
De la documentation :
Pour les boutons radio, KO définira l'élément à vérifier si et seulement si la valeur du paramètre est égale à l'attribut
value
du nœud du bouton radio. Ainsi, la valeur de votre paramètre doit être une chaîne .
Vous devez donc définir l'attribut value
de vos entrées sur "A" et "B", puis vous lier à radioSelectedOptionValue
qui contiendra "A" ou "B" selon les options. choisi:
<label>
<input name="Test" type="radio" value="A"
data-bind="checked: radioSelectedOptionValue" />
Alpha
</label>
<label>
<input name="Test" type="radio" value="B"
data-bind="checked: radioSelectedOptionValue" />
Beta
</label>
Si vous souhaitez conserver vos propriétés booléennes: A
et B
, vous devez les faire ko.computed
(en lecture seule, accessible en écriture) qui utilisera/convertira la valeur de radioSelectedOptionValue
:
this.radioSelectedOptionValue = ko.observable();
this.A = ko.computed( {
read: function() {
return this.radioSelectedOptionValue() == "A";
},
write: function(value) {
if (value)
this.radioSelectedOptionValue("A");
}
}, this);
Démo JSFiddle.
Knockout 3.x a ajouté l'option de liaison checkedValue. Cela vous permet de spécifier des valeurs autres que des chaînes.
<input name="Test" type="radio" data-bind="checked: radioSelectedOptionValue, checkedValue: true" />
<input name="Test" type="radio" data-bind="checked: radioSelectedOptionValue, checkedValue: false" />