LWC에서 <lightning-input-field>가 체크 박스 값을 설정하지 않는 이유는 무엇입니까?

Aug 17 2020

래퍼 클래스에서 내 LWC의 데이터를 얻고 있습니다. 이 데이터에서 객체 API 이름, 필드 API 이름 및 필드에 존재하는 값을 문자열 형식으로 얻습니다. 래퍼 클래스의 데이터를 반복하고를 사용하여 사용자로부터 입력을받습니다 lightning-input-field.

암호:

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

filterValue문자열 형식으로 제공됩니다. 이 코드는 확인란을 제외한 모든 필드에서 작동합니다. 비록 filterValue이 들어 truefalse같은이 UI에서 체크 박스에 반영되지 않습니다. 기본적으로 확인란은에있는 값에 관계없이 UI에서 선택된 상태로 표시됩니다 filterValue.

확인란이의 value속성 에서 값을 가져 오지 않음을 의미합니다 lightning-input-field. 또한 확인란은 항상 UI에서 기본적으로 선택되어 표시됩니다. 기본적으로 선택 취소하고 싶습니다. 왜 이런 일이 일어나는지 이해할 수 없습니다.

filterValue문자열 이기 때문 입니까? -다른 모든 필드에서 사용하기 때문에 문자열이어야합니다.

아니면 value속성 대신 속성을 사용하기 때문 checked입니까? -해당 checked속성 이 없다는 오류가 발생했습니다 .

도와주세요. 감사합니다! 😄

답변

4 PhilW Aug 17 2020 at 20:59

아마도 JavaScript의 유형 변환 규칙 때문일 것입니다. 문자열은 다음과 같은 방식으로 부울로 변환됩니다.

  • 정의되지 않았거나 null이거나 비어있는 (예 : "") 문자열은 false
  • 위의 어느 것도 아닌 문자열은 true

따라서 "true"및 "false"문자열은 모두 true부울이됩니다. 이 문제를 해결하기 위해 filterValue가 생성되거나 사용되는 방식을 변경해야합니다. 예를 들어, filterValue가 false이면 null로 설정되고 그렇지 않으면 "true"로 설정되어 있는지 확인합니다.