La liaison vrai / faux de boutons radio dans knock-out JS
De mon point de vue modèle que j'ai un IsMale valeur qui a la valeur true ou false.
Dans mon INTERFACE, je souhaite lier les boutons d'option suivants:
<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>
Le problème je pense est checked
attend une chaîne "true" /"false". Donc ma question est, comment puis-je obtenir ce 2-voie de liaison w/cette INTERFACE utilisateur et le modèle?
- Pour le Ko versions >= 3.0 voir Natan réponse pour un simple soution que celui proposé par le a accepté de répondre.
Vous devez vous connecter pour publier un commentaire.
Une option est d'utiliser un inscriptible calculée observables.
Dans ce cas, je pense que c'est un joli option est de faire de l'écriture calculée observables d'un "sous-observables" de votre
IsMale
observables. Votre modèle de vue ressemblerait à:Vous lier dans votre INTERFACE utilisateur comme:
Exemple: http://jsfiddle.net/rniemeyer/Pjdse/
create
rappels (knockoutjs.com/documentation/...) dans les mappages ou ajouter le ForEditing calculée observables après vos données a été initialisé (et d'après de nouvelles données ont été ajoutées).Je sais que c'est un vieux thread, mais j'ai eu le même problème et a trouvé une bien meilleure solution qui a probablement été ajoutée à knock-out après que cette question a été officiellement répondu, donc je vais en laisser pour les personnes avec le même problème.
Actuellement il n'est pas nécessaire pour les câbles d'extension, de liaison personnalisée gestionnaires ou computeds.
Il suffit de fournir un "checkedValue" option, au lieu d'utiliser le code html de la valeur de l'attribut, et avec qui vous pouvez passer n'importe quel javascript valeur.
Ou:
value
de liaison et puis lechecked
de liaison (dans cet ordre), mais avec la version 3.0 j'ai dû utiliser lacheckedValue
de liaison à la place de lavalue
de liaison. (2) pré-v3.0 a été pointilleux au sujet de l'obligation de lavalue
de liaison pour précéder lachecked
de liaison pour fonctionner correctement, donc j'ai un sentiment que les choses peuvent également travailler de mieux en v3.0 dans tous les scénarios, si vous mettez lecheckedValue
de liaison avant lachecked
de liaison, tels qu'ils apparaissent dans le docs.checked
ouvreur (ou peut-être quelque chose en dépend) génère une erreur puis la bonne case n'est pas cochéeCela fonctionne pour moi:
http://jsfiddle.net/zrBuL/291/
vm.IsMale(!!vm.+IsMale());
avant la sérialisation json à envoyer au serveur (dans le cas côté serveur ne peut pas traiter correctement)Utiliser ce classeur au lieu de créer stupide ko calculée observables.
Exemple:
Une fois que vous comprendre que le match initial pour le bouton radio veut correspondre qu'à une chaîne et veut régler la valeur à une chaîne, c'est simplement une question de la conversion de votre valeur initiale de la chaîne. J'ai eu à ce combat, avec les valeurs Int.
Après que vous avez configuré votre observables, convertir la valeur de chaîne et KO fera sa magie à partir de là. Si vous êtes à la cartographie avec des lignes individuelles, de faire la conversion dans ces lignes.
Dans l'exemple de code, je suis en utilisant Json pour cartographier l'ensemble du Modèle en une seule commande.
Puis en laissant de Rasoir insérer la valeur entre guillemets pour la conversion.
- Je utiliser un cliché tout à l'écran" en bas de ma page web en cours de développement.
Ici sont les valeurs de données, Avant
et, Après
Dans mon projet, je n'ai pas besoin de convertir des Booléens, parce que je suis en mesure d'utiliser une case à cocher qui n'ont pas la même frustration.
Pourquoi ne pas tout simplement vrai et faux à la place de 1 et de 0?
Vous pouvez également utiliser un extender il est donc facile de les réutiliser pour plus d'observables:
Puis l'utiliser comme ceci:
Le paramètre fourni à
boolForEditing
indique si la valeur peut être nulle.Voir http://jsfiddle.net/G8qs9/1/
Après avoir fait beaucoup de recherches pour les anciennes version de knock-out avant 3.0 il y a peut-être deux meilleures options
Créer un knock-out extender comme
Pour utiliser le répéteur sur votre modèle, vous feriez quelque chose comme ce qui suit:
source:http://www.timlabonne.com/2013/02/building-a-knockout-js-extender-for-boolean-values/