Pourquoi <lightning-input-field> ne définit pas la valeur des cases à cocher dans LWC?

Aug 17 2020

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 filterValueest au format String. Ce code fonctionne pour tous les champs sauf les cases à cocher. Même si filterValuecontient trueou 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' valueattribut 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 filterValuec'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' valueattribut au lieu de l' checkedattribut? - J'ai eu une erreur disant qu'il n'y a pas un tel checkedattribut.

Veuillez aider. Merci! 😄

Réponses

4 PhilW Aug 17 2020 at 20:59

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 truevaleurs 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.