Pourquoi <lightning-input-field> ne définit pas la valeur des cases à cocher dans LWC?
J'obtiens des données dans mon LWC à partir d'une classe wrapper. Dans ces données, j'obtiens le nom de l'API de l'objet, le nom de l'API du champ et la valeur présente dans le champ sous la forme de chaînes. J'itère les données de la classe wrapper et je prends les entrées de l'utilisateur à l'aide de lightning-input-field
.
Code:
<!-- iterate over wrapper list -->
<template iterator:item={wrapperListCopy}>
<tr key={item.value.index}>
<td>
<lightning-record-edit-form object-api-name={objectApiName}>
<lightning-input-field id={item.value.index}
field-name={item.value.inputFieldName}
value={item.value.filterValue}>
</lightning-input-field>
</lightning-record-edit-form>
</td>
</tr>
</template>
Le filterValue
est au format String. Ce code fonctionne pour tous les champs sauf les cases à cocher. Même si filterValue
contient true
ou false
, le même n'est pas reflété sur la case à cocher dans l'interface utilisateur. Par défaut, la case à cocher apparaît cochée sur l'interface utilisateur quelle que soit la valeur présente dans filterValue
.
Cela signifie que la case à cocher n'obtient pas la valeur de l' value
attribut de lightning-input-field
. De plus, la case à cocher apparaît toujours cochée par défaut dans l'interface utilisateur. Je veux qu'elle soit décochée par défaut. Je ne suis pas en mesure de comprendre pourquoi cela se produit.
Est-ce parce que filterValue
c'est une chaîne? - J'ai besoin que ce soit une chaîne car tous les autres champs l'utilisent.
Ou est-ce parce que j'utilise l' value
attribut au lieu de l' checked
attribut? - J'ai eu une erreur disant qu'il n'y a pas un tel checked
attribut.
Veuillez aider. Merci! 😄
Réponses
Probablement en raison des règles de conversion de type JavaScript; une chaîne est convertie en booléen de la manière suivante:
- une chaîne non définie, nulle ou vide (c'est-à-dire "") devient
false
- une chaîne qui n'est rien de ce qui précède devient
true
Ainsi, les chaînes "true" et "false" deviennent toutes deux des true
valeurs booléennes. Vous devez changer la façon dont votre filterValue est généré ou utilisé pour résoudre ce problème. Par exemple, assurez-vous que filterValue est défini sur null pour false et "true" dans le cas contraire.