Я пытаюсь вернуть некоторые данные из класса-оболочки в свой компонент LWC, но продолжаю получать ошибки, что бы я ни пытался.

Всякий раз, когда я загружаю страницу, я получаю property 'icon' undefined.

Вот мой текущий код:

HTML

<template>
{recordType.icon}
<template>

JS

import { LightningElement, api, wire } from 'lwc';
import getRecordType from '@salesforce/apex/ChatterUtils.getRecordType';

export default class ChatterPost extends LightningElement {
    @api post;
    recordType;

    @wire(getRecordType, {recordId: '$post.Id'})
    retrieveType(result) {
        this.recordType = result.data;
    }

}

Апекс

@AuraEnabled(Cacheable=true)
public static CustomWrapper getRecordType(Id recordId) {
    CustomWrapper cw = new CustomWrapper();
    cw.icon = 'dummy-icon';
    cw.styleClass = 'dummy-class';
    return cw;
}

public class CustomWrapper {
    @AuraEnabled
    public String icon {get; set;}
    @AuraEnabled
    public String styleClass {get; set;}

    public CustomWrapper() {
        this.icon = 'default-icon';
        this.styleClass = 'default-style';
    }

}
1
Deployment Failure 28 Апр 2020 в 15:41
Где вы определили recordType ?
 – 
Mohith Shrivastava
28 Апр 2020 в 05:34
Извините, это отсутствовало во вставленном коде, я обновил исходный пост. Вопрос остается в силе.
 – 
Deployment Failure
28 Апр 2020 в 05:39
Что вы видите значение this.recordType в console.log после того, как вы присвоили ему result.data?
 – 
Manish Anand
28 Апр 2020 в 06:33

1 ответ

Лучший ответ

Когда html отображается изначально, result равно {} , и вы пытаетесь установить для свойства null (result.data) значение recordType. Вам нужно поставить галочку, когда результат будет загружен, тогда только установите это свойство. Обновите свой код, как показано ниже

@wire(getRecordType, {recordId: '$post.Id'})
retrieveType(result)  {
    if(result.data) {
    this.recordType = result.data;
    }
}

Также изначально установите значение recordType='';.

Обратитесь к этой ссылке также для вашего другого вопроса Почему мой метод получения hasResults не работает?

Я вижу пару других проблем: - Удалось ли вам сохранить класс вершины? Я вижу, вы использовали cw.class = 'dummy-class';, но в используемом вами классе-оболочке - this.styleClass = 'default-style'; измените любой из них и создайте то же свойство.

Используйте закрывающий тег для шаблона в файле html.

0
Manish Anand 28 Апр 2020 в 08:29
Спасибо, Маниш, я заметил, что использование recordType; не работает, но когда я использовал recordType = '';, оно сработало. Есть причина для этого? Я действительно не понимаю, почему установка его как пустой строки работает, а просто инициализация - нет.
 – 
Deployment Failure
28 Апр 2020 в 15:41
Re: класс вершины, это была еще одна проблема со вставленным кодом. Я исправил.
 – 
Deployment Failure
28 Апр 2020 в 15:42
1
Тип записи = ''; это означает, что RecordType имеет значение null, а null — это тип объекта в Javascript. тип записи; , это означает, что тип записи не определен. В этом случае вы можете получить доступ к свойству объекта (null), но не к undefined. Вот еще одна ссылка на ваш вопрос, которая имеет почти такое же объяснение - salesforce.stackexchange.com/questions/304025/…
 – 
Manish Anand
28 Апр 2020 в 15:45