¿Por qué <lightning-input-field> no establece el valor de las casillas de verificación en LWC?

Aug 17 2020

Obtengo datos en mi LWC de una clase contenedora. En esos datos, obtengo el nombre de la API del objeto, el nombre de la API del campo y el valor presente en el campo en forma de cadenas. Repito los datos de la clase contenedora y tomo la información del usuario que usa lightning-input-field.

Código:

<!-- 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>

El filterValueviene en formato de cadena. Este código funciona para todos los campos excepto las casillas de verificación. Aunque filterValuecontiene trueo false, lo mismo no se refleja en la casilla de verificación en la interfaz de usuario. De forma predeterminada, la casilla de verificación aparece marcada en la interfaz de usuario independientemente del valor presente en filterValue.

Significa que la casilla de verificación no obtiene valor del valueatributo de lightning-input-field. Además, la casilla de verificación siempre aparece marcada de forma predeterminada en la interfaz de usuario. Quiero que esté desmarcado por defecto. No puedo entender por qué sucede esto.

¿Es porque filterValuees una cadena? - Necesito que sea una cadena porque todos los demás campos la están usando.

¿O es porque uso valueatributo en lugar de checkedatributo? - Recibí un error que decía que no existe tal checkedatributo.

Por favor ayuda. ¡Gracias! 😄

Respuestas

4 PhilW Aug 17 2020 at 20:59

Probablemente debido a las reglas de conversión de tipos de JavaScript; una cadena se convierte en un booleano de la siguiente manera:

  • una cadena que no está definida, es nula o vacía (es decir, "") se convierte en false
  • una cadena que no es ninguna de las anteriores se convierte en true

Por lo tanto, las cadenas "verdadero" y "falso" se vuelven truebooleanos. Debe cambiar la forma en que se genera o utiliza su filterValue para resolver esto. Por ejemplo, asegúrese de que filterValue esté establecido en null para false y "true" en caso contrario.