Почему <lightning-input-field> не устанавливает значения флажков в LWC?

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Поставляется в формате String. Этот код работает для всех полей, кроме флажков. Несмотря на то, что он filterValueсодержит trueили false, это не отражается на флажке в пользовательском интерфейсе. По умолчанию флажок отображается в пользовательском интерфейсе независимо от значения, представленного в filterValue.

Это означает, что флажок не получает значение из valueатрибута lightning-input-field. Кроме того, в пользовательском интерфейсе по умолчанию всегда отображается флажок. Я хочу, чтобы по умолчанию он не отмечен. Я не могу понять, почему это происходит.

Это потому, что filterValueэто строка? - Мне нужно, чтобы это была строка, потому что все другие поля используют ее.

Или это потому, что я использую valueатрибут вместо checkedатрибута? - У меня ошибка, что такого checkedатрибута нет.

Пожалуйста помоги. Спасибо! 😄

Ответы

4 PhilW Aug 17 2020 at 20:59

Вероятно, из-за правил преобразования типов в JavaScript; строка преобразуется в логическое значение следующим образом:

  • строка, которая не определена, равна нулю или пуста (т.е. "") становится false
  • строка, которая не соответствует ни одному из вышеперечисленных, становится true

Таким образом, строки «истина» и «ложь» становятся trueлогическими. Вам необходимо изменить способ создания или использования вашего filterValue для решения этой проблемы. Например, убедитесь, что для filterValue установлено значение null для false и «true» в противном случае.