Я создаю компонент динамической навигации (кнопки), который будет использоваться во всей организации. Я пытаюсь предоставить системным администраторам возможность указать данные (поля/поля), которые должны быть получены компонентом force:recordData (служба данных Lightning), чтобы значения были доступны и на них можно было ссылаться при построении внешнего URL.

Для этого я предоставляю атрибут String как элемент дизайна под названием «fieldAPIName». Затем администратор укажет имя API поля, т. е. AccountId. Затем я использую этот атрибут следующим образом:

<force:recordData recordId="{!v.recordId}" 
                fields="{!'Id,'+v.fieldAPIName}"  
                targetFields="{!v.record}" 
                aura:id="recordData"
                recordUpdated="{!c.recordLoaded}"
                mode="VIEW"/> 

Атрибут 'fields' RecordData представляет собой массив строк. У вас не может быть массив строк в качестве элемента дизайна, поэтому я использую элемент String для извлечения имен полей и добавления его к идентификатору (как указано выше), чтобы эффективно имитировать следующее;

    <force:recordData recordId="{!v.recordId}" 
                fields="Id, AccountId"  
                targetFields="{!v.record}" 
                aura:id="recordData"
                recordUpdated="{!c.recordLoaded}"
                mode="VIEW"/> 

Когда страница загружается, я получаю следующую ошибку:

Ошибка действия: force:record$controller$init [ошибка типа в полях параметров: ожидаемая строка [], найденная строка]

Я хотел бы избежать вызова на стороне сервера, если это возможно, и избежать подхода FULL layoutType (поэтому поле не обязательно должно быть в макете, чтобы быть доступным).

Я, наверное, упускаю что-то очевидное. Любая помощь будет принята с благодарностью!

4
J. Radcliffe 7 Мар 2019 в 20:11

1 ответ

Лучший ответ

Вы можете выполнить анализ значения на стороне клиента:

<aura:attribute name="fieldNames" type="String" default="Id" />
<aura:attribute name="fieldNameList" access="private" type="String[]" default="['Id']" />
<aura:handler name="init" value="{!this}" action="{!c.doInit}" />

<force:recordData recordId="{!v.recordId}" 
            fields="{!v.fieldNameList}"  
            targetFields="{!v.record}" 
            aura:id="recordData"
            recordUpdated="{!c.recordLoaded}"
            mode="VIEW"/> 

doInit: function(component, event, helper) {
  component.set("v.fieldNameList", component.get("v.fieldNames").split(","));
  // ...
},

Измените этот код соответствующим образом, чтобы проверить наличие ошибок и т. д.

1
sfdcfox 8 Мар 2019 в 01:53
Спасибо за вашу помощь @sfdcfox. К сожалению, действие инициализации не вызывается перед данными записи, поэтому значения полей недоступны во время извлечения данных. Не уверены, есть ли способ манипулировать разметкой, чтобы ссылаться на другие атрибуты? <aura:attribute name="fieldNames" type="String" default="Id" /> <aura:attribute name="fieldNameList" access="private" type="String[]" default="[{!v.fieldNames}]" />
 – 
J. Radcliffe
8 Мар 2019 в 13:09
1
@ J.Radcliffe Нет, вам нужно вызвать метод reloadRecord для последующей загрузки данных. Вы не можете установить значение по умолчанию на основе другого атрибута.
 – 
sfdcfox
8 Мар 2019 в 14:39