Por que <lightning-input-field> não está definindo o valor das caixas de seleção no LWC?
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 filterValue
vem no formato String. Este código funciona para todos os campos, exceto as caixas de seleção. Embora filterValue
contenha true
ou 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 value
atributo 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 value
atributo em vez de checked
atributo? - Recebi um erro dizendo que esse checked
atributo não existe .
Por favor ajude. Obrigado! 😄
Respostas
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.