Por que <lightning-input-field> não está definindo o valor das caixas de seleção no LWC?

Aug 17 2020

Estou obtendo dados em meu LWC de uma classe de wrapper. Nesses dados, obtenho o nome da API do objeto, o nome da API do campo e o valor presente no campo na forma de Strings. Eu itero sobre os dados da classe wrapper e recebo a entrada do usuário usando 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>

O filterValuevem no formato String. Este código funciona para todos os campos, exceto as caixas de seleção. Embora filterValuecontenha trueou false, o mesmo não se reflete na caixa de seleção na IU. Por padrão, a caixa de seleção aparece marcada na IU, independentemente do valor presente em filterValue.

Isso significa que a caixa de seleção não está obtendo valor do valueatributo de lightning-input-field. Além disso, a caixa de seleção sempre aparece marcada por padrão na IU. Quero que seja desmarcado por padrão. Não consigo entender por que isso está acontecendo.

É porque filterValueé uma String? - Preciso que seja uma string porque todos os outros campos estão usando.

Ou é porque eu uso valueatributo em vez de checkedatributo? - Recebi um erro dizendo que esse checkedatributo não existe .

Por favor ajude. Obrigado! 😄

Respostas

4 PhilW Aug 17 2020 at 20:59

Provavelmente devido às regras de conversão de tipo do JavaScript; uma string é convertida em um booleano da seguinte maneira:

  • uma string indefinida, nula ou vazia (ou seja, "") torna-se false
  • uma string que não é nenhuma das anteriores torna-se true

Assim, as cadeias de caracteres "true" e "false" tornam true-se booleanas. Você precisa alterar a forma como o filterValue é gerado ou usado para resolver isso. Por exemplo, certifique-se de que filterValue seja definido como null para false e "true" caso contrário.